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 :

tester deux formulaires séparément


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Par défaut tester deux formulaires séparément
    Bonjour à tous,

    Je me permet de poster car après une recherche j'ai trouvé des sujets similaires mais ne m'aidant pas trop pour mon cas.

    Je dispose de deux formulaires sur la même page, lorsque l'on valide le premier, le deuxième aparait sur la même page, cependant j'aimerais effectuer une action suite au postage du second formulaire.

    Je pensais que cela pourrait fonctioner avec un test de type if (isPost)
    Malheureusement je n'y arrive pas il prend en compte le premier formulaire et rentre dans mon if (normal puisque je n'arrive pas à faire mon test sur le post du second formulaire).

    Voila le code de ma page html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Le client concerné est : <?php echo $this->concernes['NOMCLIENT']. " - " . $this->concernes['PRENOMCLIENT']?>
    <?php echo $this->form;?>
     
    <?php 
    if ($this->conseillers != null && $this->concernes != null && $this->formations != null && $this->typeactes != null) {?>
    	Récapitulatif :  
    	<div>
    	<div>Le conseiller <?php echo $this->conseillers['NOMCONSEILLER']. " " . $this->conseillers['PRENOMCONSEILLER']; ?> rédige un acte de type <?php echo $this->typeactes['LIBELLETYPEACTE']?>.</div>
    	<div>Le client <?php echo $this->concernes['NOMCLIENT']. " " . $this->concernes['PRENOMCLIENT'];?> suivra la formation <?php echo $this->formations["LIBELLEFORMATION"]; ?> dans le centre <?php echo $this->centres["LIBELLECENTRE"];?></div>
    	<div>Pour un montant total de : <?php echo $this->formations['TAUXHORAIREFORMATION'] * $this->formations['DUREEFORMATION'];?>€</div></div>
    	<?php 
    	echo $this->formulaire;
    }
    ?>

    Voila le code de 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    	public function ajouterAction(){
    		$this->view->title = "Ajout d'actes";
    	    $this->view->headTitle($this->view->title, 'PREPEND');
    	    //commence par ici en récupérant l'id
    	    // si on arrive pas a récupérer l'id on lui attribue la valeur 0
            $idClient = $this->_getParam('IDCLIENT', 0);
            if ($idClient == 0){
            	$this->_helper->redirector('acte');	
            }
     
            //objet client
            $clients = new Application_Model_DbTable_Client();
            $this->view->concernes = $clients->recupClient($idClient);
    		//objet conseiller
    	    $conseillers = new Application_Model_DbTable_Conseiller();
    	    //objet centre
    	    $centres = new Application_Model_DbTable_Centre();
    	    //objet formation
    	    $formations = new Application_Model_DbTable_Formation();
    	    //objet typeacte
    	    $typeActes = new Application_Model_DbTable_TypeActe();
    	    //défini le numero du contrat et le place dans une variable
    		$fic = APPLICATION_PATH .'/configs/numContrat.txt';
    		$open = fopen($fic,"r");
    		$numContrat = fgets($open)+1;
    		//création d'un formulaire avec comme parametre le contenu de la table
    	    $form = new Application_Form_Acte($conseillers->fetchAll()->toArray(),$centres->fetchAll()->toArray(),
    	    								  $formations->fetchAll()->toArray(),$typeActes->fetchAll()->toArray());
    	    $this->view->form = $form;
     
    	    //si le formulaire est posté
    	    if ($this->getRequest()->isPost()) {
    	    	//alors on récupère ce qui à été posté
    	        $formData = $this->getRequest()->getPost();
    	        //et on vérifie que le formulaire est valide
    	        if ($form->isValid($formData)) {
    		    	$idConseiller = $form->getValue('IDCONSEILLER');
    		    	$idCentre = $form->getValue('IDCENTRE');
    		    	$idFormation = $form->getValue('IDFORMATION');
    		    	$idTypeActe = $form->getValue('IDTYPEACTE');
    	            $nbrFinanceur = $form->getValue('NBRFINANCEUR');
    	            $valid = new Zend_Validate_Digits();
    		        if ($valid->isValid($nbrFinanceur)){
    			    	$formation = $formations->recupFormation($idFormation);
    			    	$centre = $centres->recupCentre($idCentre);
    					$this->view->formations = $formation;
    					$this->view->centres = $centre;
    					$this->view->conseillers = $conseillers->recupConseiller($idConseiller);
    					$this->view->typeactes = $typeActes->recupTypeActe($idTypeActe);
    					//$typeActes->recupTypeActe($idTypeActe);
    					//$form->Ajouter->setLabel('Suivant');
    					$financeurs = new Application_Model_DbTable_Financeur();
    				    // on passe à la suite du formulaire
     					$form2 = new Application_Form_Acte2($financeurs->fetchAll()->toArray(),$nbrFinanceur);
    					//$this->view->form = $form2;
    					$this->view->formulaire = $form2;
    					$i=0;
    		        } else {
    		        	echo "pas ok";
    		        }
    	        }
    	    } else {
    	    //	$form->populate($formData);
    	    }
    	}
    Voila le code de mon premier 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
    <?php
    class Application_Form_Acte extends Zend_Form
    {
        public function __construct($conseillers = null,$centres = null,$formations = null,$typeActes = null)
        {
            parent::__construct($conseillers,$centres,$formations,$typeActes);
     
            $this->setName('acte');
            $id = new Zend_Form_Element_Hidden('IDACTE');
     
            $conseiller = new Zend_Form_Element_Select('IDCONSEILLER');
            $conseiller->setLabel('Conseiller qui rédige cet acte : ')
            		->setRequired(true)
            		->addMultiOption(0,"Veuillez choisir un conseiller");
            //liste tous ce qu'on récupère de la table	
        	$i = 0;
        	foreach ($conseillers as $cons[]){
    			$conseiller->addMultiOption($cons[$i]['IDCONSEILLER'], $cons[$i]['NOMCONSEILLER']." ".$cons[$i]['PRENOMCONSEILLER']);	
    			$i = $i +1;
    		}
            $centre = new Zend_Form_Element_Select('IDCENTRE');
            $centre->setLabel('Centre dans lequel se déroule la formation: ')
            		->setRequired(true)
            		->addMultiOption(0,"Veuillez choisir un centre");
            //liste tous ce qu'on récupère de la table	
        	$i = 0;
        	foreach ($centres as $centr[]){
    			$centre->addMultiOption($centr[$i]['IDCENTRE'], $centr[$i]['LIBELLECENTRE']);	
    			$i = $i +1;
    		}
     
    		$formation = new Zend_Form_Element_Select('IDFORMATION');
            $formation->setLabel('Formation suivie: ')
            		->setRequired(true)
            		->addMultiOption(0,"Veuillez choisir une formation");
            //liste tous ce qu'on récupère de la table	
        	$i = 0;
        	foreach ($formations as $forma[]){
    			$formation->addMultiOption($forma[$i]['IDFORMATION'], $forma[$i]['LIBELLEFORMATION']);	
    			$i = $i +1;
    		}
     
        	$typeActe = new Zend_Form_Element_Select('IDTYPEACTE');
            $typeActe->setLabel("L'acte est un : ")
            		->setRequired(true)
            		->addMultiOption(0,"Veuillez choisir un type d'acte");
            //liste tous ce qu'on récupère de la table	
        	$i = 0;
        	foreach ($typeActes as $typ[]){
    			$typeActe->addMultiOption($typ[$i]['IDTYPEACTE'], $typ[$i]['LIBELLETYPEACTE']);	
    			$i = $i +1;
    		}
    		$nbrFinanceur = new Zend_Form_Element_Text('NBRFINANCEUR');
    		$nbrFinanceur->setLabel("Nombre de financeurs")
    					// le champs est obligatoire
    					->setRequired(true)
    					// supprime le HTML non désiré
    	                ->addFilter('StripTags')
    	                // supprime les espaces 
    	                ->addFilter('StringTrim')
    	                //on interdit les saisis vides
    	                ->addValidator('NotEmpty');
            $envoyer = new Zend_Form_Element_Submit('Suivant');
            $envoyer->setAttrib('IDACTE', 'boutonrechercher');
            $this->addElements(array($id,$conseiller,$centre,$formation,$typeActe,$nbrFinanceur,$envoyer));
    	}
    }
    Voila le code de mon second 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
    <?php
    class Application_Form_Acte2 extends Zend_Form
    {
        public function __construct($financeurs = null, $nbrFinanceur = null)
        {
            parent::__construct($financeurs,$nbrFinanceur);
     
            $this->setName('acte2');
            $j=0;
    		while ($j < $nbrFinanceur){
    	        $id = new Zend_Form_Element_Hidden('IDACTE'.$j);
    	 		$financeur = new Zend_Form_Element_Select('IDFINANCEUR'.$j);
    	        $financeur->setLabel("Financeur : ")
    	        		->setRequired(true)
    	        		->addMultiOption(0,"Veuillez choisir un financeur");
    	        //liste tous ce qu'on récupère de la table	
    	   		$i = 0;
    	    	foreach ($financeurs as $finan[]){
    				$financeur->addMultiOption($finan[$i]['IDFINANCEUR'], $finan[$i]['LIBELLEFINANCEUR']);	
    				$i = $i +1;
    			}
    			$financement = new Zend_Form_Element_Text("MONTANTFINANCEMENT".$j);
    	        $financement->setLabel('Participation : ')
    	        		// le champs n'est pas obligatoire
    	                ->setRequired(true)
    	                // supprime le HTML non désiré
    	                ->addFilter('StripTags')
    	                // supprime les espaces 
    	                ->addFilter('StringTrim')
    	                //on interdit les saisis vides
    	                ->addValidator('NotEmpty');
     
     
    	        $j = $j+1;
    	      	$this->addElements(array($id,$financeur,$financement));
    	      	$totalFinance[] = $financement->getValue('MONTANTFINANCEMENT'.$j);
    		}
    		$envoyer = new Zend_Form_Element_Submit('Ajouter');
    	    $envoyer->setAttrib('IDACTE', 'boutonrechercher');
    	   	$calculer = new Zend_Form_Element_Button('Calculer');
    	    $calculer->setAttrib('calculer', 'boutoncalculer');
            $this->addElements(array($envoyer,$calculer));
    	}
    }

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Par défaut
    Mon problème est que lorque j'appui sur le bouton de mon deuxième formulaire, cela recharge la page sans le deuxième formulaire.
    Ce que je souhaiterais faire c'est vérifier si le deuxième formulaire à été posté et récupérer le contenu de ses champs texte.

    Quelqu'un pourrait il m'aider voir me guider vers une autre solution ?

    Je vous remercie par avance

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Par défaut
    ce que je souhaiterais faire, est ce seulement possible ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,

    Tu peux faire un test sur le bouton calculer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($this->_request->getPost('boutoncalculer'))

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if($this->getRequest()->getPost('boutoncalculer')){
         echo "sisi";
    }else{
         echo "nonon";
    }
    Le problème est qu'avec le bouton calculer ca ne submit pas donc la page ne se rafraichie pas, par conséquent mon test ne se refait pas.

    Si je fait un bouton de type submit je raffraichi la page et mon deuxième formulaire disparait (vu qu'il recharge toute l'action).

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Regarde le code HTML généré, je pense que ton deuxième formulaire n'est pas dans un form

Discussions similaires

  1. Comment disposer deux formulaires sur la même ligne ??
    Par soad029 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/05/2007, 05h14
  2. Deux formulaires
    Par nah_wah dans le forum Langage
    Réponses: 14
    Dernier message: 14/12/2005, 18h18
  3. tester existance Formulaire
    Par LeScandinave dans le forum Access
    Réponses: 3
    Dernier message: 02/11/2005, 12h20
  4. reprendre un enchainement de code entre deux formulaires.
    Par scully2501 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 17h11
  5. probleme deux formulaires imbriqués
    Par rony dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/06/2005, 19h19

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