Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-12-2010 16:29:58

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

[ZF 1.9.2] Test valeur checkbox

Bonjour,

Je suis en train de m'arracher les cheveux pour quelque chose qui me semblait très simple. Je dispose d'un formulaire  dans lequel je dois cocher une checkbox afin que le submit fonctionne.

Le checkbox est codé en HTML dans la vue, et dans le controller, je cherche à contrôler la valeur pour savoir si c'est coché ou non.

Dans mon formulaire, j'ai le code suivant :

Code:

<p align="left"><input type='checkbox' name='cgu' value="1" /><a href='<?php echo $this->baseUrl ?>/pay/cgu' target='_blank'>J'ai lu et accepté les conditions générales de vente</a></p><br />

et dans mon controller :

Code:

if($_POST['cgu'] != "1"){
         $this->_redirect('/error/cgu');
      }

Je suis systématiquement renvoyé vers "error/cgu" ...

Auriez-vous une idée de ce ui serait erronée ? car je ne vois pas pourquoi la valeur du checkbox n'est pas récupéré.
D'avance merci.
Vincent

Hors ligne

 

#2 10-12-2010 07:35:31

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [ZF 1.9.2] Test valeur checkbox

Salut,

si la case n'est pas coché, elle n'existe pas dans la variable $_POST.

Code:

if(!isset($_POST['cgu']) && $_POST['cgu'] != "1"){
    $this->_redirect('/error/cgu');
}

Hors ligne

 

#3 10-12-2010 08:25:37

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

Bonjour,
Même lorsque la case est coché, je n'au aucune valeur dans $_POST['cgu'].
Je ne comprends pas pourquoi elle n'est psa envoyé.
Uariez-vous une idée?
merci.

Hors ligne

 

#4 10-12-2010 13:11:39

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [ZF 1.9.2] Test valeur checkbox

Salut,

tu as essayé de faire un

Code:

print_r($_POST);die();

avant toute chose pour vérifier ce que contenait ta variable ?

Hors ligne

 

#5 10-12-2010 13:26:53

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

Ma variable $_POST ne contient rien, je ne comprends pas pourquoi ...

Hors ligne

 

#6 10-12-2010 14:49:45

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

N'ayant pas de solution, je tente d'une façon différente :


Code:

->addElement(
            'CheckBox',
            'cgu',
            array(
              'label' => 'I accept CGU',
              'style' =>'margin-left:100px;',
              'required' => true,
              'checkedValue' => '1'
              )
        )

Malheureusement, ça ne me donne rien non plus... moi qui croyait qu'il était simple d'utiliser une case à cocher ...
je préfère les développements web sans framework ...

Je dispose un controlle avec plusieurs méthodes

dont une "voirAction" :


Code:

 $form = new Zend_Form();
        $idElement = $form->createElement('hidden', 'id')->setValue($id);
        $keyElement = $form->createElement('hidden', 'key')->setValue($key);
        
    
     $form->setMethod('post')
             ->setAttrib("target","_self")
           ->setAction(ROOT_URL . '/pay')
           ->addElement(
            'CheckBox',
            'cgu',
            array(
              'label' => 'I accept CGU',
              'style' =>'margin-left:100px;',
              'required' => true,
              'checkedValue' => '1'
              )
        )
           ->addElement('submit', 'Accéder à la plateforme ', array('label' => 'Accéder à la plateforme'))
           ->addElement($idElement)
           ->addElement($keyElement);
 
        $this->view->form = $form;
        $this->view->dp = $dp;

Puis la méthode "indexAction" appelé par le submit du formulaire :

Code:

if(!isset($_POST['cgu']) && $_POST['cgu'] != "1"){
        $this->_redirect('/error/cgu');
      }

quand je vérifie le contenu de $_POST['cgu'], je n'ai rien, que la case soit cochée ou non.

Auriez-vous une idée avec ces éléments?

Hors ligne

 

#7 10-12-2010 14:58:10

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

sinon, autre solution : est-ce possible de faire apparaître le bouton de validation seulement après avoir coché la case ? en gros, dès que l'utilisateur coche la case, faire apparaître le bouton.
Si possible, pourriez-vous m'expliquer comment faire ?

Hors ligne

 

#8 10-12-2010 15:58:14

Greg
Membre
Lieu: Haute loire
Date d'inscription: 14-11-2007
Messages: 24

Re: [ZF 1.9.2] Test valeur checkbox

vince56 a écrit:

Code:

if(!isset($_POST['cgu']) && $_POST['cgu'] != "1"){
        $this->_redirect('/error/cgu');
      }

Si tu utilises directement $_POST, ce n'est pas de la faute au framework. Ici ton code renverra une erreur E_STRICT : si l'index cgu n'est pas défini, tu ne peux pas tester sa valeur avec un opérateur ET, tu ne peux le faire qu'avec un opérateur OU.

Je te conseille de placer la directive error_reporting à E_ALL | E_STRICT dans ton fichier php.ini.

Pour résoudre plus simplement ton problème - et en utilisant le framework - essaies avec ca :

Code:

if ($this->getMethod()->getPost('cgu') == null) {
    $this->_redirect('/error/cgu');
}
 ....

Hors ligne

 

#9 10-12-2010 16:04:56

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

voici le résultat

Uncaught exception 'Zend_Controller_Action_Exception' with message 'Method "getMethod" does not exist and was not trapped in __call()' in C:\Program Files\ZendFrameworkCli\library\Zend\Controller\Action.php

Hors ligne

 

#10 10-12-2010 16:20:30

Greg
Membre
Lieu: Haute loire
Date d'inscription: 14-11-2007
Messages: 24

Re: [ZF 1.9.2] Test valeur checkbox

Oui, c'est getRequest() et non getMethod(), désolé :

Code:

if ($this->getRequest()->getPost('cgu') == null) {
    $this->_redirect('/error/cgu');
}
 ....

Dernière modification par Greg (10-12-2010 16:20:52)

Hors ligne

 

#11 10-12-2010 16:26:01

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

je n'ai plus le message d'erreur, mais si je coche la case, ce n'est pas pris en compte ..

Hors ligne

 

#12 10-12-2010 16:41:45

Greg
Membre
Lieu: Haute loire
Date d'inscription: 14-11-2007
Messages: 24

Re: [ZF 1.9.2] Test valeur checkbox

Est-ce que tu pourrais poster ici le résultat HTML du Zend_Form?

Hors ligne

 

#13 10-12-2010 17:43:56

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [ZF 1.9.2] Test valeur checkbox

Ton formulaire doit pas avoir method="post" ou doit avoir une mauvaise action.

Est-ce que tes paramètres vont en Get dans ton URL ?

Hors ligne

 

#14 14-12-2010 10:07:35

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

Bonjour,

Le résultat du formulaire HTML donne ceci : (si j'ai bien compris ce que vous m'avez demandé)

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>    
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />    
    <title>Facture     
    </title>    
    <link rel="stylesheet" type="text/css" href="/public/styles/global.css" media="all" />      
    <style type="text/css" media="print">@page {     size: landscape; !important   /* auto est la valeur initiale */     /*margin: 10%; !important*/ } body {     margin-left:0px;     margin-top:0px;     margin-right:0px;     margin-bottom:0px; }      
    </style>  
  </head>  
  <body>    
    <div style="width:640px; padding:20px; border:2px #999 outset; float:none; clear:both; margin:auto;">      
      <table id="factureComm" width="640" border="0" align = "center">             
        <tr>                   
          <td align="left">            
            <font style="color:#666;" size="6" face="Arial Black">              TEST VINCENT            
            </font><br />                         T<br />            Tel.:              0200000000<br />                         email@domaine.com        </td>                   
          <td width="30%" align="right">            
            <font style="color:#666;" size="4" face="Arial Black">FACTURE N&deg;               9999            
            </font></td>             
        </tr>             
        <tr>        <td>&nbsp;</td>             
        </tr>      
      </table>      
      <table id="factureClient" width="640" border="0" align = "center">             
        <tr>                   
          <td height="22">&nbsp;</td>                   
          <td rowspan="3" align="right">            
            <img id="image" src="/public/images/com/202.jpg" style="max-width:385px;" /></td>             
        </tr>             
        <tr>                   
          <td height="22"><b>DATE :</b>  03-12-2010        </td>             
        </tr>             
        <tr>                   
          <td valign="top"><b>Factur&eacute; &agrave; :</b>              Vincent<br />                         <br />                         vincent@free.fr        </td>             
        </tr>      
      </table>      
      <table id="factureDesc" width="640" border="0" align = "center">             
        <tr>                   
          <td width="440">&nbsp;</td>                   
          <td width="200">&nbsp;</td>             
        </tr>             
        <tr>                   
          <td bgcolor="#AA0000" align="center" style="color:white;"><b>DESCRIPTION</b></td>                   
          <td bgcolor="#AA0000" align="center" style="color:white;"><b>MONTANT TOTAL </b></td>             
        </tr>             
        <tr>        <td>&nbsp;</td>        <td>&nbsp;</td>             
        </tr>             
        <tr>                   
          <td valign="top">            </td>                   
          <td align="right">150,00 &nbsp; &euro; &nbsp; <br />        </td>             
        </tr>             
        <tr>        <td>&nbsp;</td>        <td>&nbsp;</td>             
        </tr>             
        <tr>        <td>&nbsp;</td>        <td>&nbsp;</td>             
        </tr>                     
        <tr align="right">        <td>SOUS-TOTAL</td>        <td><strong>              150,00</strong> &nbsp; &euro; &nbsp; </td>             
        </tr>             
        <tr align="right">        <td>TAUX DE T.V.A.</td>        <td> NC  &nbsp; &nbsp; &nbsp; &nbsp; </td>             
        </tr>             
        <tr align="right">        <td>T.V.A.</td>        <td> - &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </td>             
        </tr>                     
        <tr align="right">        <td><strong>TOTAL</strong></td>        <td><strong>              150,00</strong> &nbsp; &euro; &nbsp; </td>             
        </tr>             
        <tr>        <td>&nbsp;</td>        <td>&nbsp;</td>             
        </tr>             
        <tr bgcolor="#AA0000">                   
          <td colspan="2">&nbsp;</td>             
        </tr>             
        <tr>        <td>&nbsp;</td>        <td>&nbsp;</td>             
        </tr>      
      </table>    
    </div>    
    <table id="factureForm" width="640" border="0" align = "center">           
      <tr>                 
        <td align="right">                       
          <form name="" action="#" method="post">                afficher en mode pdf              
            <input name="generarpdf" type="submit" value=" " style="width:41px; height:41px; background:url(/public/images/pdf_icon.gif); border:none; text-indent:-99999px; cursor:pointer;" />                       
          </form>        </td>           
      </tr>    
    </table>    
    <table id="factureForm" width="640" border="0" align = "center">           
      <tr>                 
        <td align="center">                                                 
          <p align="left">            
            <input type='checkbox' name='cgu' value="1" />            
            <a href='/pay/cgu' target='_blank'>J'ai lu et accepté les conditions générales de vente</a>          
          </p><br />                         
          </form>
          <form enctype="application/x-www-form-urlencoded" method="post" target="_self" action="http://zfproject.localhost/pay">
            <dl class="zend_form">
              <dt id="Accéderàlaplateformedepaiement-label">&nbsp;
              </dt>
              <dd id="Accéderàlaplateformedepaiement-element">
                <input type="submit" name="Accéderàlaplateformedepaiement" id="Accéderàlaplateformedepaiement" value="Accéder à la plateforme de paiement">
              </dd>
              <dt id="id-label">&nbsp;
              </dt>
              <dd id="id-element">
                <input type="hidden" name="id" value="8715" id="id">
              </dd>
              <dt id="key-label">&nbsp;
              </dt>
              <dd id="key-element">
                <input type="hidden" name="key" value="NTZkOTY3OTNlMTMwODJjYmM5YjYxN2U3YTViYjJkZjJiMDJiNTUxMzkyOTEwYjU4MzFiNDZmOTMxYTYwNWU2NjQxM2NmYjA5Y2YwOTljZDUyMGExZWQ3N2I2NTc5ZjNlYmRmMzc5OGE4OWJlNGNhZDVmNjQ2ZmIwNzNmZDY0NjI=" id="key">
              </dd>
            </dl>
          </form>        </td>           
      </tr>    
    </table>  
  </body>
</html>

Pour la déclaration du formulaire et du mode "POST", j'ai ceci :

Code:

$form->setMethod('post')
             ->setAttrib("target","_self")

Merci pour votre aide

Hors ligne

 

#15 14-12-2010 11:48:39

Greg
Membre
Lieu: Haute loire
Date d'inscription: 14-11-2007
Messages: 24

Re: [ZF 1.9.2] Test valeur checkbox

La structure de ton document HTML est mauvaise :
- tu as une fermeture de balise form qui se balade toute seule ligne 89
- tu as 2 formulaires indépendants dans ta page, un de la ligne 77 à 79, l'autre de la ligne 90 à 108, je pense que tu as voulu n'en faire qu'un seul, ils ont tous les deux le même ID
- ta checkbox n'est incluse dans aucun formulaire

Je pense que tu as créé deux instances de Zend_Form, ce qui pose problème dans ton cas.

Tu n'es pas forcé d'appeler la méthode render de ton instance Zend_Form, tu peux simplement écrire à la main dans ton template la balise form elle-même et ensuite appeler le rendu de chaque élément là où tu veux les afficher :

Code:

 
  <form enctype="<?php echo $this->form->getEnctype()?>" method="<?php echo $this->form->getMethod()?>" target="_self" action="<?php echo $this->form->getAction()?>">
    <table id="factureForm" width="640" border="0" align = "center">
      <tr>
        <td align="right">
                afficher en mode pdf
            <?php echo $this->form->getElement('generarpdf')->render() ?>
        </td>
      </tr>
    </table>
    <table id="factureForm" width="640" border="0" align = "center">
      <tr>
        <td align="center">
            <?php echo $this->form->getElement('cgu')->render() ?><a href='/pay/cgu' target='_blank'>J'ai lu et accepté les conditions générales de vente</a>
            <?php echo $this->form->getElement('Accéderàlaplateformedepaiement')->render() ?>
            <?php echo $this->form->getElement('id')->render() ?>
            <?php echo $this->form->getElement('key')->render() ?>
        </td>
      </tr>
    </table>
  </form>

Hors ligne

 

#16 14-12-2010 14:50:41

vince56
Membre
Date d'inscription: 30-11-2010
Messages: 96

Re: [ZF 1.9.2] Test valeur checkbox

effectivement les 2 formulaires, ce n'est pas terrible. J'ai récupéré le code comme ça, donc je ne le connais pas encore très bien.
Ensuite, il fonctionne tout de même sans cette case à cocher.
Puis, le second formulaire apparaît selon une condition (script PHP), donc qui n'apparaît pas.
Dans l'exemple de code que tu m'a fourni, il faut donc que je créé la checkbox dans mon controller, et non plus en HTML ?
merci

Hors ligne

 

#17 14-12-2010 16:33:27

Greg
Membre
Lieu: Haute loire
Date d'inscription: 14-11-2007
Messages: 24

Re: [ZF 1.9.2] Test valeur checkbox

Oui, l'ensemble des éléments de ton formulaire et le formulaire lui-même sont à déclarer dans le contrôleur, le template lui ne sert qu'à mettre en forme la page et indiquer l'endroit où tu veux que les champs apparaîssent.

De plus, Zend_Form devrait également faire en sorte que tu aies toujours une valeur retournée par la checkbox du formulaire, même si la case n'est pas cochée. Tu peux aussi t'aider des validateurs de Zend_Validate qui s'intègrent très facilement dans Zend_Form.

Dernière modification par Greg (14-12-2010 16:34:08)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages