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 :

[ZF 1.11] Comment valider conjointement 2 champs de formulaires


Sujet :

Zend_Form PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Points : 30
    Points
    30
    Par défaut [ZF 1.11] Comment valider conjointement 2 champs de formulaires
    Bonjour

    Je veux réaliser un truc assez classique : je propose à l'utilisateur du site de modifier son mot de passe, son adresse mail, son département, (...) via un formulaire.

    S'agissant du mot de passe, j'ai 2 champs dans le formulaire : Nouveau et Confimation

    Je veux que les champs soient valides dans les cas suivants :
    -Cas 1 : Les deux champs sont vides (= cas ou l'utilisateur ne veut pas changer son mot de passe)
    ou bien :
    -Cas 2 : Les 2 champs sont non vides, avec une valeur identique pour les 2, ... et de format Alphanumerique+longueur entre 5 et 10 caractères... blablabla.

    Comment peut on faire cela proprement avec des éléments de formulaire et des valideurs ?

    J'ai déjà créé un valideur pour le champ Confirmation qui compare la valeur de ce champ a celle du champ Nouveau. A l'instanciation de ce valideur, je lui passe une référence au champ Nouveau pour accéder à la valeur de ce champ et la comparer valeur du champ Confirmation.

    Par ailleurs, j'ai mis pour mes 2 champs le flag Required à false, pour autoriser qu'ils soient laissés vides (cas 1 de validation)

    >>> Problème : Lorsque je saisis quelque chose dans Nouveau, et rien dans Confirmation. Il considère le formulaire comme valide, car dans ce cas comme le champ Confirmation est vide, il ne va pas continuer les tests pour vérifier si sa valeur est égale à la valeur du champ Nouveau !

    Voici un bout de mon code :

    Zend_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
     
         function init()
         {
         ...
         $psw = new Zend_Form_Element_Password('Nouveau');
         $psw->setRequired(false)
              ->setLabel('Nouveau')
              ->addValidator(new Monvalideur_Formatpsw);
         ...
         $pswcValideur = new Monvalideur_PswConfirmationIdentique;
         $pswcValideur->attachePsw($psw);
     
         $pswc = new Zend_Form_Element_Password('Confirmation');
         $pswc->setRequired(false)
              ->setLabel('Confirmation')
              ->addValidator(new Monvalideur_Formatpsw)
              ->addValidator($pswcValideur);
         ...
         $this->addElement($psw)
              ->addElement($pswc);
         ...
         }
    Mon valideur de comparaison des 2 champs :

    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
     
    class Monvalideur_PswConfirmationIdentique extends Zend_Validate_Abstract
    {
     
         const MSG_NOT_EQUAL = 'msgNotEqual';
     
         /**
         * @var Zend_Form_Element Mot de passe Initial avec lequel sera comparé 
         * le mot de passe de confirmation
         */
         protected $_pswObjet;
     
         /**
         * @var array Template des messages d'erreur retournés suite test de validation
         */
         protected $_messageTemplates = array(
              self::MSG_NOT_EQUAL => 'Les deux mots de passe saisis doivent être identiques');
     
     
        /**
         * Attache le mot de passe Initial dont la valeur est à comparer au mot de passe
         * de confirmation
         *
         * @param Zend_Form_Element Mot de passe initial
         */
    	public function AttachePsw($psw)
    	{
    		$this->_pswObjet = $psw;
    	}
     
     
        /**
         * Valide la valeur du mot de passe de confirmation
         * Le cas échéant, détermine l'erreur
         * 
         * @param   mixed   Valeur à valider
         * @return  boolean TRUE si le mot de passe de confirmation est égale à la
         * valeur du mot de passe initial attaché.
         */
    	public function isValid($valeurPswConfirmation)
    	{
    		$this->_setValue($valeurPswConfirmation);
     
    		if($valeurPswConfirmation != $this->_pswObjet->getValue())
    		{
    			$this->_error(self::MSG_NOT_EQUAL);
    			return false;
    		}
    		return true;
    	}
    }
    Merci pour votre aide,

  2. #2
    Membre régulier Avatar de eaglesnipe
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Bonsoir !

    Une réponse peut être un poil en retard

    Je t'invite à regarder ce post sur Stackoverflow :
    http://stackoverflow.com/questions/2...zend-framework

    2 solutions sont suggérées pour la gestion de la validation du password et de sa confirmation.
    La première consiste à ne mettre de validateurs que sur l'un des éléments, l'un des validateurs consistant à vérifier la validité de la syntaxe du password, l'autre permettant d'aller vérifier la cohérence entre les 2 champs.

    La seconde est l'utilisation, en supplément des validateurs de vérification de la syntaxe, de Zend_Validate_Identical qui permet d'associer le contenu d'un champ à un autre.

    En espérant que ça puisse t'aider.

Discussions similaires

  1. [AC-2010] Expression de validation d'un champ de formulaire
    Par sardaucar dans le forum IHM
    Réponses: 2
    Dernier message: 05/02/2013, 17h06
  2. Validation d'un champ de formulaire avant submit
    Par Rony Rauzduel dans le forum jQuery
    Réponses: 7
    Dernier message: 09/11/2012, 18h09
  3. Validation de plusieurs champs de formulaire
    Par Arjuna dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/09/2012, 12h10
  4. Retrouver le focus après non validation d'un champ de formulaire.
    Par pidlas dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 19/06/2010, 20h17
  5. Réponses: 10
    Dernier message: 04/01/2007, 14h32

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