Bonjour,
Aujourd'hui j'enrage devant un problème tout con, ça fait des heures que je bloque dessus, je vois pas de solution, et pas grand chose pour m'aider:
Je veux donc faire un formulaire (chose faite avec zend_form), dans ce formulaire j'ai deux bouton, un submit et un bouton simple. Bon pour le moment on s'en fou, les deux font la même chose.
Quand j'appuie sur le bouton submit, le formulaire recharge donc la page avec les mêmes valeurs.
Sauf que j'aimerais modifier une valeur à partir du moment où j'envoie le formulaire.
Dès que j'envoie le formulaire, cela m'ajoute 5 lignes input que je pourrais remplir. (pour me simplifier la vie j'ai juste fait un tableau vide pour le moment)
Sauf que pas moyen de faire passer une variable ou de remplir un champ hidden qu'on modifie.
(je veux pas de session, je pense pas qu'il y en a besoin, mais c'est surtout que pour détruire la valeur, ça risque d'être très moche à coder)
Voici mon code:
mon controller:
(j'ai effacer tous mes laborieux essai pour que $form->setvalue('nbligne') soit modifié à chaque fois qu'on post (nbligne = $nbligne + 5 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public function newfrfAction() { $form_article = $_SESSION['article']; $form_designation = $_SESSION['designation']; $form_famille = $_SESSION['famille']; $form_techno = $_SESSION['techno']; $options = $_SESSION['fournisseur']; $form_statut = $_SESSION['statut']; $form = new Front_Form_Createfrf(); $form->famille->setValue($form_famille); $form->techno->setValue($form_techno); $form->article->setValue($form_article); $form->designation->setValue($form_designation); $form->fournisseur->addMultiOptions($options); $form->anomalie->addMultiOptions($_SESSION['anomalie']); $form->precision->addMultiOptions($_SESSION['precision']); $form->compolie->addMultiOptions(array('1' => 'Non', '2' => 'Oui')); $form->statut->setValue($form_statut); $nbligne = 5 ; $form->nbligne->setValue($nbligne); $errorMessage = ""; $request = $this->getRequest(); new Front_Model_DbTable_Frf(); if ($request->isPost()) { $formData = $this->_request->getPost(); $form->populate($formData); if ($form->isValid($request->getPost())) { } } $this->view->script = "vue_newfrf();"; $this->view->errorMessage = $errorMessage; $this->view->form = $form; }
Mon form:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 class Front_Form_Createfrf extends Zend_Form { public function init() { $this->setMethod('post') ->setName('create') ->setAttrib('name', 'form_createfrf'); $famille = new Zend_Form_Element_Hidden('famille'); $this->addElement($famille); $nbligne = new Zend_Form_Element_Text('nbligne'); $this->addElement($nbligne); $techno = new Zend_Form_Element_Hidden('techno'); $this->addElement($techno); $article = new Zend_Form_Element_Text('article'); $article->setLabel('Code article ') ->setRequired(TRUE) ->setAttrib('readonly', '') ->setAttrib('size', '40') ->setAttrib('autocomplete', 'off') ->addFilters(array('StringTrim', 'StripTags')) ->addValidators(array(array('validator' => 'StringLength', 'options' => array(0, 20)))); $this->addElement($article); ........ (je racourcie) $ajoutligne = new Zend_Form_Element_Button('ajoutligne'); $ajoutligne->setLabel('Ajout de lignes') ->setAttrib('tabindex', '11') ->setAttrib('onclick', 'form_createfrf.submit(); ') ->setIgnore(TRUE); $this->addElement($ajoutligne); $statut = new Zend_Form_Element_Text('statut'); $statut->setLabel('Statut ') ->setRequired(TRUE) ->setAttrib('readonly', '') ->setAttrib('size', '10') ->setAttrib('autocomplete', 'off') ->addFilters(array('StringTrim', 'StripTags')) ->addValidators(array(array('validator' => 'StringLength', 'options' => array(0, 20)))); $this->addElement($statut); $valider = new Zend_Form_Element_Submit('valider'); $valider->setLabel('Valider') ->setAttrib('tabindex', '11') ->setIgnore(TRUE); $this->addElement($valider); $this->setDecorators(array(array('ViewScript', array('viewScript' => '/index/newfrfscript.phtml')))); } }
Et mon script qui met en forme mon formulaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 form action="<?php echo $this->escape($this->element->getAction()); ?>" method="<?php echo $this->escape($this->element->getMethod()); ?>" name="<?php echo $this->escape($this->element->getAttrib('name')); ?>" id="form_create"> <fieldset id="fieldset1"> <legend>Article à traiter</legend> <table> <tr><td><?php echo $this->element->famille->renderViewHelper(); ?></td> <td><?php echo $this->element->techno->renderViewHelper(); ?></td> </tr> <tr> <td><?php echo $this->element->article->renderLabel(); ?></td> <td><?php echo $this->element->article->renderViewHelper(); ?></td> </tr> <tr> <td><?php echo $this->element->nbligne->renderViewHelper(); ?></td> <td></td> </tr> <tr> <td><?php echo $this->element->designation->renderLabel(); ?></td> <td><?php echo $this->element->designation->renderViewHelper(); ?></td> </tr> ........... racourcie ...... <?php if (isset($_POST['nbLigne']) && $_POST['nbLigne'] != 0) { $nbLigne = $_POST['nbLigne']; }else{ $nbLigne = 5; } for ($i = 1; $i <= $nbLigne; $i++) { ?> <tr> <th width="20px" align="center"> </th> <th width="50px"><?php echo ($i); ?></th> <th width="140px"> </th> <th width="140px"> </th> <th width="100px"> </th> <th width="10px"> </th> </tr> <?php } ?> <tr> <th colspan="6"> <?php echo $this->element->ajoutligne->renderViewHelper(); ?> </th> </tr> </table> </fieldset> <fieldset id="fieldset4"> <legend>Validation</legend> <table> <tr> <td><?php echo $this->element->statut->renderLabel(); ?></td> <td><?php echo $this->element->statut->renderViewHelper(); ?></td> </tr> <tr> <td style="width:116px;"> </td> <td> <?php echo $this->element->valider->renderViewHelper(); ?></td> </tr> </table> </fieldset> </form>
faites pas attention à mon script qui ajoute les lignes, il est pas beau et ne fonctionne pas volontairement.
Je voit que mon champ hidden nbligne ne bouge pas avec firebug. (ou en passant dessus), si je le passe en champ texte, c'est pareil.
Bref je suis certaine que c'est un truc bidon qui m'échappe, mais je ne vois pas.
Partager