IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Formulaire, modification après submit [ZF 1.10]


Sujet :

Zend_Form PHP

  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Par défaut Formulaire, modification après submit
    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:
    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;
        }
    (j'ai effacer tous mes laborieux essai pour que $form->setvalue('nbligne') soit modifié à chaque fois qu'on post (nbligne = $nbligne + 5 )


    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">&nbsp;</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;">&nbsp;</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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Par défaut
    Je suis pas sur d'avoir tout compris mais pour lire une variable d'un formulaire, c'est :

  3. #3
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonjour,
    Tout d'abord pour récupérer une valeur c'est avec $form->getValue(...) une fois que tu as vérifié les données avec isValid(...)
    En suite pour mettre a jour les valeur c'est la méthode populate qu'il faut utiliser.

  4. #4
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Par défaut
    Citation Envoyé par 5h4rk Voir le message
    Bonjour,
    Tout d'abord pour récupérer une valeur c'est avec $form->getValue(...) une fois que tu as vérifié les données avec isValid(...)
    En suite pour mettre a jour les valeur c'est la méthode populate qu'il faut utiliser.
    $form->getValue(...) récupère les valeur rentré dans le formulaire, tandis que
    ma façon de faire récupère les valeur entrée en post.

    ça revient au même.

    Et j'ai déjà essayé avec populate ... mais rien n'y fait.


    Finalement hier, j'ai trouvé une petite astuce, modifié la valeur en javascript avant d'envoyer le formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->setAttrib('onclick', 'document.getElementById("nbligne").value = parseInt(document.getElementById("nbligne").value) + 5 ;form_createfrf.submit(); ')
    j'ai modifié un petit peu mon script qui génère le formulaire dans la vue, et hop ça marche. Tout est fonctionnel.

    Même si je comprend pas pourquoi ça ne veut pas fonctionner via une insertion php...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/03/2009, 12h06
  2. Comparaison champs d'un formulaire avant/après modifications
    Par Lehobbit78 dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/08/2008, 16h43
  3. valeur des variables de formulaire après submit ?
    Par mounia.n dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2008, 16h25
  4. Réponses: 4
    Dernier message: 28/11/2006, 13h55
  5. Redirection vers la même page après submit de formulaire
    Par noOneIsInnocent dans le forum Struts 1
    Réponses: 5
    Dernier message: 27/10/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo