[SPIP Zone] Formulaire CVT qui pose des cookies

Bonjour,

Je cherche à faire un formulaire d'options CVT (3 cases à cocher postées en ajax) sur l'espace public.
La pose de cookies donne un résultat erratique.

Ai-je une mauvaise méthode dans ma fonction _traiter ?

function formulaires_docvideos_options_traiter_dist(){

     include_spip("inc/cookie");

     $lbMasquerMp4 = _request( 'masquer_mp4') ? 'oui' : 0;
     $lbMasquerOgv = _request( 'masquer_ogv') ? 'oui' : 0;
     $lbMasquerWebm = _request( 'masquer_webm')? 'oui' : 0;

     $liExpire = strtotime( '+3 months' );

     if (!(
         spip_setcookie( 'masquer_mp4', $lbMasquerMp4, $liExpire) &&
         spip_setcookie( 'masquer_ogv', $lbMasquerOgv, $liExpire) &&
         spip_setcookie( 'masquer_webm', $lbMasquerWebm, $liExpire))) {
       return array(
             'message_erreur' => "erreur au dépot d'un cookie !",
         );
     }

     return array(
         'message_ok' => "Options enregistrées dans les cookies.",
     );
}

Merci

--
Stéphane

Les Voisins Spipeurs : http://www.voisins-spipeurs.net

Stéphane Santon a écrit le 26/11/2014 00:59 :

Bonjour,

Je cherche à faire un formulaire d'options CVT (3 cases à cocher postées
en ajax) sur l'espace public.
La pose de cookies donne un résultat erratique.

Il ne faut pas oublier qu'un cookie lorsqu'il est posé par une page, n'est visible qu'après le chargement de la page suivante.
Est-ce que ça serait ça ton comportement erratique ?
(indice : Ajax ne charge pas la page suivante)

--
RealET

Bonjour,

Le 26/11/2014 07:18, RealET a écrit :

Je cherche à faire un formulaire d'options CVT (3 cases à cocher postées
en ajax) sur l'espace public.
La pose de cookies donne un résultat erratique.

Il ne faut pas oublier qu'un cookie lorsqu'il est posé par une page,
n'est visible qu'après le chargement de la page suivante.
Est-ce que ça serait ça ton comportement erratique ?
(indice : Ajax ne charge pas la page suivante)

Je me doute d'un truc comme ça, mais je n'ai pas toutes les ficelles...

Il me semblait qu'ajax était une requête http au même titre qu'une page, et donc que les cookies pouvaient être posés, surtout si pour l'instant je ne les réutilise que dans ce formulaire ajaxisé.

N'est donc pas tout à fait ça ??
Faut-il alors supprimer l'ajax ? Ou bien autre subtilité ?

Merci

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.

Même par ajax, le cookie devrait être créé avec sa valeur.
Pour vérifier la fonction il faudrait vérifier dans le navigateur après validation du formulaire si le cookie existe.
Donc le formulaire lui-même étant rechargé en ajax il peut connaître la valeur du cookie, il me semble…

en tout cas il connaît la valeur du formulaire, c’est la même chose…

Le 26/11/2014 08:48, chankalan a écrit :

Même par ajax, le cookie devrait être créé avec sa valeur.
Pour vérifier la fonction il faudrait vérifier dans le navigateur après
validation du formulaire si le cookie existe.
Donc le formulaire lui-même étant rechargé en ajax il peut connaître la
valeur du cookie, il me semble...

OK, merci.
Même sans ajax, le problème apparaît...

1. La fonction spip_setcookie : http://code.spip.net/autodoc/tree/ecrire/inc/cookie.php.html#function_spip_setcookie

Cite : <<
Retour
     bool
     true si le cookie a été posé, false sinon.
>>

Si le cookie a bien été effacé en le posant à false, la fonction renvoie-t-elle true (opération réussie) ?

2. Peut-on lancer plusieurs lignes de spip_setcookie à suivre ?

Merci

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.

Rahhh... J'ai un problème dés le chargement....
Probablement le nez dessus mais nez bouché....

HTML : http://pastebin.com/gbFUBa0G
PHP : http://pastebin.com/JkhdLXui

Mes 2 cookies masquer_mp4 et masquer_ogv sont posés.
Si je vide le cache, et charge la page, seule la première case est cochée...

Puis-je charger /false/ comme valeur au formulaire ?

Je traque encore...

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com

Bon... ça semble fonctionner.

Il semble qu'il faille désactiver la variable $_COOKIE dans traiter.

function pose_cookie( $name, $value) {
  if ($value == 'oui') {
    $liExpire = strtotime( '+3 months' );
        return spip_setcookie( $name, $value, $liExpire, '/');
  } else {
    $liSupprime = strtotime( '-1 month');
         spip_setcookie( $name, '', $liSupprime, '/');
    unset( $_COOKIE[$name]);
    return true;
  }
}

function formulaires_docvideos_options_traiter_dist(){
  refuser_traiter_formulaire_ajax();
  include_spip("inc/cookie");

  $lbMp4 = pose_cookie( 'masquer_mp4', _request( 'masquer_mp4'));
  $lbOgv = pose_cookie( 'masquer_ogv', _request( 'masquer_ogv'));
  $lbWebm = pose_cookie( 'masquer_webm', _request( 'masquer_webm'));

Le 26/11/2014 09:38, Stéphane Santon a écrit :

Rahhh... J'ai un problème dés le chargement....
Probablement le nez dessus mais nez bouché....

HTML : http://pastebin.com/gbFUBa0G
PHP : http://pastebin.com/JkhdLXui

Mes 2 cookies masquer_mp4 et masquer_ogv sont posés.
Si je vide le cache, et charge la page, seule la première case est
cochée...

Puis-je charger /false/ comme valeur au formulaire ?

Je traque encore...

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.