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 :

Validation de formulaire


Sujet :

Zend_Form PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut Validation de formulaire
    Bonjour à tous,

    je suis actuellement bloqué sur la création d'un formulaire. Je cherche à utiliser les possibilités de validation mais qqchose m'échappe.

    Dans ma classe "MonFormulaire" je créer l'ensemble des champs de mon formulaire et tous possède un validateur (souvent : ne doit pas être vide").

    Je sais que l'on doit utiliser "isValid" pour vérifier la validation de mon formulaire mais je n'ai aucune idée de où ???

    - Si je met isValid à la fin de ma classe, lorsque mon objet est créé il ne peut vérifier de suite sa validation ?
    - Si je met isValid dans ma page de réception de mon formulaire, c'est que je dois rediriger ensuite à nouveau vers le formulaire mais les messages d'erreurs ne pourront pas être utilisés...
    - Reste le Javascript mais je doute que ce soit ca !

    Je sais qu'il y a un point sur la validation qui m'a complètement échappé mais je ne voit pas lequel.

    Merci d'avance pour votre aide....


  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    L'action de ton form doit être la même que celle qui permet de l'afficher.
    Par exemple, ton formulaire est rendu par monController/monform. Le formulaire pointe vers la même action.
    Après, dans ton controller, de 3 choses l'une :
    1) La requête n'est pas en POST => tu affiches le form vierge (ou avec les données récupérées si tu es en edit)
    2) La requête est en POST =>
    a) le formulaire est valide => tu enregistres les données et tu fais éventuellement une redirection.
    b) le formulaire est invalide => tu 'repeuples' les champs et tu réaffiches le formulaire.
    Exemple tout à fait basic :
    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
    public function monformAction() {
        // création de ton form
        $form = new monFormulaire();
     
        if ($this->_request->isPost()) {
            if ($form->isValid($this->_request->getPost()) {
                // ton form est valide
                // => enregistrement des données
                // => redirection éventuelle
            } else {
                // ton form est invalide
                // réinjecte les valeurs saisies par l'user
                $form->populate($this->_request->getPost());
                // nouvel affichage du formulaire
            }
        } else {
            // initialisation et 1er affichage du formulaire
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    OK Merci je viens de comprendre la subtilité. Dans tous les exemple que j'avais trouvé, aucun ne précisait ce point.

    Encore MERCI,

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Avec plaisir
    N'oublie pas le tag

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Oui, encore merci pour tes réponses rapides et précises. Je n'avais pas oublié la balise "Résolu", je voulais juste vérifier l'application de ce que tu m'avais dit.

    Le seul "hic" qu'il me restait est que pour que ca marche il faut que le submit pointe vers le même formulaire.


  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    C'est ultra simple : tu ne mets pas d'action pour ton form. Il pointera donc automatiquement vers la page en cours.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Je crois que je vais faire le boulet là mais j'ai un problème pour l'utilisation de la validation.

    Je donne mes sources:

    J'ai une vue basique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    echo $this->form;
    ...
    Jusqu'à là c'est bon je pense....

    J'un un controlleur dans lequel j'ai mis le script proposé :

    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
     
        function formAction()
        {
    		$form = new SendForm();    
     
    		if ($this->_request->isPost()) {	// Vérification si un formulaire à déjà été envoyé
     
    	        if ($form->isValid($this->_request->getPost())) {	// Vérification si le formulaire envoyé est valide
    	            // ton form est valide
    	            // => enregistrement des données
    	            // => redirection éventuelle
    	        } else {
    	            // Formulaire invalide
    	            // réinjecte les valeurs saisies par l'user
    	            $form->formNotValid();
    	            // nouvel affichage du formulaire
    	        }
     
    		}
     
        }

    Puis j'ai mis les différents "états" de mon formulaire dans la partie model:

    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
     
    class SendForm extends Zend_Form
    {
    	public function init()
    	{
            // Méthode d'envoi du formulaire
    		$this->setMethod ('post')
    			->setAttrib('enctype', 'multipart/form-data');	// Nécessaire pour l'import d'un fichier
     
    		// Bouton pour l'envoi du formulaire
            $submit = $this->addElement ('submit', 'Confirmer');
     
    		// Création de l'ensemble des éléments du formulaire
    		$nomCouche = $this->addElement ('text', 'nomCouche', array('label' => 'Nom de la Couche'));
    		$nomCouche = $this->getElement('nomCouche')
    			->addValidator('NotEmpty')
    			->setRequired(true);
     
        }
     
     
    	public function formNotValid()
    	{
     
    		// Création de l'ensemble des éléments du formulaire
    		$nomCouche->setMessage('Le chmap ne doit pas être vide');
     
        }
    En fait, quelque soit l'état de mon formulaire j'ai toujours la même affichage : un formulaire vide.

    J'ai fait plusieurs essais mais aucun de convainquant. Est ce que qq'un à une idée ?

    Merci d'avance,

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Ton formNotValid() ne sert à rien ; ce n'est pas une bonne méthode pour traduire les messages d'erreurs de validation => regarde la FAQ à ce sujet (j'ai fait un Q/R sur la traduction des messages).

    Essaye donc avec le code que je t'ai donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            } else {
                // ton form est invalide
                // réinjecte les valeurs saisies par l'user
                $form->populate($this->_request->getPost());
                // nouvel affichage du formulaire
            }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Merci encore une fois pour ta réponse et le temps que tu passes à m'aider.

    En fait, j'avais déjà essayer avec ce que tu m'avais donner mais ca ne marche pas : qq soit l'état de mon formulaire (vide, non validé) il apparait tjrs de la même facon c'est à dire: VIDE !

    Il y a qqchsoe qui m'échappe dans la logique du Zend_Form. C'est mon premier essais avec cette classe mais j'ai du mal pour le moment.

    HELP !

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Poste le code complet de ton controller (dans le code que tu donnes, tu n'affectes pas le form à la vue).

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Voilà mais je ne sais pas si ca va t'aider:

    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
     
    <?php
     
     
    class TempController extends Zend_Controller_Action 
    {
        function init()
        {
            $this->view->baseUrl = $this->_request->getBaseUrl();
        }
     
        function formAction()
        {
    		$form = new SendForm();    
     
    		if ($this->_request->isPost()) {	// Vérification si un formulaire à déjà été envoyé
     
    	        if ($form->isValid($this->_request->getPost())) {	// Vérification si le formulaire envoyé est valide
    	            // ton form est valide
    	            // => enregistrement des données
    	            // => redirection éventuelle
    	            $form = "";
    	        } else {
    	            // Formulaire invalide
    	            // réinjecte les valeurs saisies par l'user
    	            $form->populate($this->_request->getPost());
     
    	            // nouvel affichage du formulaire
    	        }
    		}
     
    		$this->view->form = $form;
        }
    }

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Quand tu affiches ton form, vois-tu les différents champs ou pas ?
    Poste le HTML généré (uniquement le <form>).

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Citation Envoyé par vg33 Voir le message
    Quand tu affiches ton form, vois-tu les différents champs ou pas ?
    Poste le HTML généré (uniquement le <form>).
    Oui je vois toujours les 2 champs que j'ai créées vides: "nomCouche" et "source"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form enctype="multipart/form-data" method="post" action=""><dl class="zend_form">
    <dt>&nbsp;</dt><dd>
    <input type="submit" name="Confirmer" id="Confirmer" value="Confirmer"></dd>
     
    <dt><label for="nomCouche" class="required">Nom de la Couche</label></dt>
    <dd>
    <input type="text" name="nomCouche" id="nomCouche" value=""></dd>
    <dt><label for="source" class="required">Type de source</label></dt>
    <dd>
    <input type="text" name="source" id="source" value=""></dd></dl></form>

  14. #14
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Je viens de tester les codes fournis, et je ne vois aucun problème : tout fonctionne comme prévu chez moi : si je rentre une donnée invalide, l'erreur s'affiche, et si je rentre une info, rien ne s'affiche (normal puisque tu fais $form = "").

    Au passage, il est inutile de faire $form->populate($this->_request->getPost()); c'est fait automatiquement par le framework lors de l'appel à isValid

    Bizarre

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    OK OK j'ai fait le boulet

    Je viens de comprendre d'où viennent tous mes problèmes depuis hier: je modifie un controlleur qui n'est pas en lien avec ma vue.

    Je pouvais toujours faire des modifs, ca risquait pas de marcher.

    Je tiens à m'excuser de temps perdu pour ceux qui ont plancher sur mon problème.

    Encore un grand MERCI pour toutes les réponses....


  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par Devil Shark Voir le message
    OK OK j'ai fait le boulet
    ARG !!!!
    Bon, ça arrive au meilleur d'entre-nous !
    Est-ce qu'on moins ça fonctionne avec le bon controller ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 99
    Par défaut
    Oui parfaitement !

    ENCORE DESOLE !

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

Discussions similaires

  1. validation du formulaire de la page ouvrante d'un popup
    Par noa dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/08/2005, 12h11
  2. Réponses: 5
    Dernier message: 24/05/2005, 11h21
  3. Valider un formulaire contenu dans une iframe
    Par snoopy5.0 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2005, 11h14
  4. Valider un formulaire par une image
    Par Fleep dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/10/2004, 01h50
  5. [Struts]Validation de formulaire
    Par djoukit dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/03/2004, 09h12

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