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 :

Comparer deux champs


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut Comparer deux champs
    salut,

    j'ai un grand formulaire dans lequel on doit spécifier une heure d'ouverture et une autre de fermeture,

    j'ai essayé de créer un Validateur qui me permetterai de verifier si l'heure de fermeture est plus grande que celle d'ouverture,

    mais j'arrive pas à récuperer la valeur de l'heure d'ouverture (sachant que j'applique le validateur sur l'heure de fermeture)

    voici le code de mon validateur :
    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
    <?php
    	Class CompareHeuresValidator  extends Zend_Validate_Abstract {
    		const COMPARE = 'compare';
     
    		protected $_messageTemplates = array(self::COMPARE => "L'heure d'ouverture ne peut être plus grande que celle de fermeture ('%value%')");
    		protected $_heure;
     
    		public function __construct($heure){
    			echo "construct heure : ".$heure;
    			$this->_heure = $heure;
    		}
     
    		public function isValid($value){
    			$this->_setValue($value);
    			try{
    				$tab1=explode(":",$this->_heure);
    				$tab2=explode(":",$value);
    			}
    			catch(Exception $e){
    				$this->_error();
    				return false;
    			}
     
    			if ((int)$tab1[0]>(int)$tab2[0]){
    				if ((int)$tab1[1]>(int)$tab2[1]){
    					$this->_error();
    					return false;
    				}
    			}
    			echo "heure : ".$this->_heure;
    			//echo $heure;
    			$this->_error();
    			return false;
    		}
    	}
    et voici une partie de mon code de création du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ........
    	$ouvert = new Zend_Form_Element_Text('h_ouvert');
    	$ouvert->setLabel('Heure d\'ouvertue : ');
     
    	$ferme = new Zend_Form_Element_Text('h_ferme');
    	$ferme->setLabel('Heure de fermeture : ')
    	->addValidator(new CompareHeuresValidator($ouvert->getValue()));
    ........
    Merci d'avance
    Bien cordialement

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (strtotime($ferme)>strtotime($ouvert));
    Retourne true si la saisie est valide, false dans le cas contraire...

    Je ne sais pas si c'est la réponse que tu attendais...

  3. #3
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par Sub0 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (strtotime($ferme)>strtotime($ouvert));
    Retourne true si la saisie est valide, false dans le cas contraire...

    Je ne sais pas si c'est la réponse que tu attendais...
    salut,

    Malheuresement non Sub0

    j'ai un problème concernant la récuperation de la valeur de l'heure d'ouverture, je ne sais pas comment le faire sachant que j'applique le validateur sur l'heure de fermeture

    Merci
    Bien cordialement

  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
    Dans le constructeur de ton valideur, tu mets l'objet request en paramètre ainsi que l'id du champ avec lequel tu souhaites comparer ta date. Dans ton valideur, tu récupères la date en question par $request->getPost(), et tu fais ta comparaison.

  5. #5
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par vg33 Voir le message
    Dans le constructeur de ton valideur, tu mets l'objet request en paramètre ainsi que l'id du champ avec lequel tu souhaites comparer ta date. Dans ton valideur, tu récupères la date en question par $request->getPost(), et tu fais ta comparaison.
    salut,

    je dirai pas non pour un petit bout de code, parce que ce n'est pas très clair

    Merci d'avance
    Bien cordialement

  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
    Ton valideur (c'est juste un exemple : à toi d'implémenter les tests) :

    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
    class My_Validate_Date extends Zend_Validate_Abstract
    {
     
        const DATE = 'invalidDate';
     
        /**
         * Messages d'erreur
         * 
         * @var array
         */
        protected $_messageTemplates = array(
            self::DATE => "'%value%' must be later than %openDate%."
        );
     
        /**
         * Heure d'ouverture
         * 
         * @var string
         */
        protected $_openDate;
     
        /**
         * variables supplémentaires pour les messages d'erreur
         *
         * @var array
         */
        protected $_messageVariables = array(
            'openDate' => '_openDate'
        );
     
     
        /**
         * Récupère les options de validation
         *
         * @param  string $openDate Heure d'ouverture
         * @return void
         */
        public function __construct($openDate)
        {
            $this->_openDate = $openDate;
        }
     
        /**
         * Defini par Zend_Validate_Interface
         *
         * @param  mixed $value La valeur du champ
         * @return boolean
         */
        public function isValid($value)
        {
            $this->_setValue($value);
     
            // implémente les tests
            if ($value <= $this->_openDate) {
                $this->_error();
                return false;
            }
     
            return true;
        }
    }
    Et dans ton form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $closeDate = new Zend_Form_Element_Text('closeDate');
    if ($this->_request->isPost()) {
        $post = $this->_request->getPost();
        $closeDate->addValidator(new My_Validate_Date($post['openDate']), true);
    }
    Ici, pour simplifier, je n'ai pas passé l'objet request en paramètre mais directement la date d'ouverture : ça permet de réutiliser ce valideur pour n'importe quelle date devant être inférieure à une autre.

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

Discussions similaires

  1. [XL-2003] comparer deux champs texte
    Par Waldner11 dans le forum Excel
    Réponses: 1
    Dernier message: 02/06/2009, 16h48
  2. Comparer deux champs concaténés
    Par mouaa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/05/2008, 15h26
  3. Filtrer une table en comparant deux champs entre eux
    Par damene dans le forum Débuter
    Réponses: 13
    Dernier message: 12/04/2008, 19h10
  4. comparer deux champs d un formulaire
    Par williams59 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/12/2007, 11h38
  5. Editeur de recherche - comparer deux champs
    Par sscouby dans le forum 4D
    Réponses: 1
    Dernier message: 17/10/2007, 12h08

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