Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] problème chainage formulaires jforms

Posted by zolz on 11/25/2008 23:34

Bonsoir,

J'essaie de gérer des inscriptions pour mon association. Le formulaire à remplir est relativement long et doit être adapté en fonction des données saisies par l'utilisateur. Je l'ai découpé en 7 étapes et donc 7 formulaires jForms et 7 templates. Un peu comme pour les assistants d'installation des logiciels Windows. Dans chaque étape, je récupère une partie des données, les vérifie et en fonction de celles-ci je passe à une autre étape. Dans l'étape 7 je sauve les données dans la BdD.

Dans mon contrôleur, mes étapes sont codées de la façon suivante :

 public function etape1() {
        $form = jForms::get('inscriptions~etape1');
        if ($form == false)
                $form = jForms::create('inscriptions~etape1');
        $tpl = new jTpl();
        $tpl->assign('form',$form);
        $tpl->assign('submitAction' , $this->_getAction('etape1b'));
        $rep = $this->_getResponse();
        $rep->body->assign($this->templateAssign, $tpl->fetch('inscriptions~etape1'));
        return $rep;
 }
 public function etape1b() {
        $form = jForms::fill('inscriptions~etape1');
        $infos = $form->getAllData();
 // validation des données supprimée pour plus de concision 
        $rep = $this->getResponse('redirect');
        $rep->action = $this->_getAction('etape2');
        return $rep;
 }

Je peux naviguer entre les étapes sans perdre les données saisies, je peux récupérer les données de l'étape X dans la fonction etapeXb mais si je tente, par exemple, dans l'etape2b de récupérer les données du formulaire de l'étape 1, avec le code

 $form1 = jForms::fill('inscriptions~etape1');

j'ai l'erreur suivante :

 [exception 835]  Le token du formulaire n'est pas valide, vous devez remplir le formulaire correctement à partir du site. /var/www/lib/jelix/forms/jFormsBase.class.php 142

J'ai essayé de modifier la valeur de jFormsBase::SECURITY_CSRF pour ne plus lever cette exception mais à ce moment là, jForms::fill renvoie une structure vide.

Qu'est ce que j'ai raté ? J'utilise une jelix 1.1 nightly que j'ai téléchargé ce soir.

Merci. Zolz.

  [Opened] Re: problème chainage formulaires jforms

Reply #1 Posted by laurentj on 11/26/2008 15:44

Salut,

Tu utilises quoi comme contrôleur là ? (je vois que tu as des méthodes du même nom que celles du CRUD, et je ne suis pas sûr que ce soit bien conseillé d'utiliser le CRUD ici, vu la spécificité de ton formulaire)

Ensuite, tu affiches ton formulaire comment ?

modifier la valeur de jFormsBase::SECURITY_CSRF

C'est une constante, je vois pas comment tu peux la modifier.. Il faut mettre l'attribut allowAnyOrigin="true" sur la balise form, pour désactiver la protection CSRF.

  [Opened] Re: problème chainage formulaires jforms

Reply #2 Posted by zolz on 11/28/2008 00:33

Salut,

Merci pour ta patience.

J'utilisais jControllerDaoCrub mais je viens de revenir à jControlleur.

Pour le formulaire, j'ai :

 {form $form, $submitAction}
        <table>
                {formcontrols}
                        <tr>
                                <th>{ctrl_label} :</th>
                                <td colspan="3">{ctrl_control}</td>
                        </tr>
                {/formcontrols}
        </table>
        {formsubmit}
        </center>
 {/form}

J'ai modifié mes fichiers etapeX.form.xml pour mettre l'attribut allowAnyOrigin :

 <?xml version="1.0" encoding="utf-8"?>
 <form xmlns="http://jelix.org/ns/forms/1.1" allowAnyOrigin="true">

C'était bien de ça que tu parlais ? Je n'ai plus les exceptions mais jForms::fill me donne toujours une structure vide.

Quand je vais à l'étape 1 dans mon navigateur et que je rentre les données de mon formulaire, la session PHP contient bien les données et l'URL passe bien à l'etape2.

Si je modifie l'URL dans le navigateur pour aller à l'action etape1b, la session PHP ne contient plus les données que j'avais saisi. Je pense que c'est pour cela que j'ai une structure vide.

Par contre, si je passe d'étape en étape sans passé par étapeXb, la session garde les données.

Je ne vois toujours pas ce que j'ai raté.

Merci, Zolz

  [Opened] Re: problème chainage formulaires jforms

Reply #3 Posted by laurentj on 11/28/2008 13:47

Si je modifie l'URL dans le navigateur pour aller à l'action etape1b, la session PHP ne contient plus les données que j'avais saisi. Je pense que c'est pour cela que j'ai une structure vide.

Ça c'est normal. Si tu lis bien la doc, la méthode fill rempli le formulaire avec les données qu'il trouve dans le $_POST ou $_GET. Or si tu va directement manuellement à l'url du fill, tu n'as rien dans ton post et get, donc fill rempli le formulaire avec des valeurs vides...

Tout à fait logique donc.

Si tu veux éviter ça, avant de faire le fill, à toi de regarder d'où tu viens, et de faire alors soit un jForms::get, soit un jForms::fill.

 
Page
  1. problème chainage formulaires jforms