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 :

Comment contrôler date fin > date début dans un form ?


Sujet :

Zend_Form PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Comment contrôler date fin > date début dans un form ?
    Bonjour,

    j'ai un formulaire avec une date début et une date de fin,
    j'aimerai contrôler que la date de fin est supérieure à la date de début

    voici mon code :

    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
     
    class Application_Form_Recherche extends Zend_Form
    {
     
        public function init()
        {
              ...		
    		// instanciation d'un objet champ date avec calendrier (dojo)
    		$DateDebut = new Zend_Dojo_Form_Element_DateTextBox('DateDebut');
    		$DateDebut->setLabel('Date debut')
    				->setRequired(true)
    				->addFilter('StripTags')
    				->addFilter('StringTrim')
    				->addValidator('NotEmpty')
    				->setValue(date("Y-m-d", $hier));
     
    		$DateFin = new Zend_Dojo_Form_Element_DateTextBox('DateFin');
    		$DateFin->setLabel('Date Fin')
    				->setRequired(true)
    				->addFilter('StripTags')
    				->addFilter('StringTrim')
    				->addValidator('NotEmpty')
    				->setValue(date("Y-m-d", $hier));
    ...
    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Points : 119
    Points
    119
    Par défaut
    Bonjour Intik,

    ce que tu peux faire c'est créer un validateur personnalisé sur l'exemple du validateur LessThan mais qui va comparer deux dates?

    Pour cela tu peux aller voir l'api, il y a des méthodes pour faire la comparaison de deux dates... cf. http://framework.zend.com/apidoc/core/

    C'est une proposition.....

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    Merci flilou,

    ça a l'air de marcher le Zend_Validate_GreaterThan :

    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
    $DateDebut = new Zend_Dojo_Form_Element_DateTextBox('DateDebut');
    		$DateDebut->setLabel('Date debut')
    				->setRequired(true)
    				->addFilter('StripTags')
    				->addFilter('StringTrim')
    				->addValidator('NotEmpty')
    				// ->addValidator(new Zend_Validate_LessThan(array('max' => $DateFin->getValue())))
    				->setValue(date("Y-m-d", $hier));
     
    		$DateFin = new Zend_Dojo_Form_Element_DateTextBox('DateFin');
    		$DateFin->setLabel('Date Fin')
    				->setRequired(true)
    				->addFilter('StripTags')
    				->addFilter('StringTrim')
    				// ->addValidator('NotEmpty')
    				->addValidator(new Zend_Validate_GreaterThan(array('min' => $_POST['DateDebut'])))
    				->setValue(date("Y-m-d", $hier));
    mais la page n'est pas bloquée quand les dates ne sont pas bonnes (Date fin < Date début) et la redirection se fait sur la page suivante .
    comment peut on bloquer l'action du formulaire quand on veux afficher le message d'erreur ?

    peut être ajouter une condition dans mon contrôleur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form->setAction($redirection)->setMethod('post');
    ???

    merci

  4. #4
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 841
    Points : 6 514
    Points
    6 514
    Par défaut
    J'ai codé récemment un validateur personnalisé pour cette problématique récurrente, basé sur le validateur standard between :
    Code php : 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
    <?php
     
    class Application_Validate_DateBetween extends Zend_Validate_Between
    {
        public function setMax($max)
        {
            return parent::setMax(new Zend_Date($max));
        }
     
        public function setMin($min)
        {
            return parent::setMin(new Zend_Date($min));
        }
     
        protected function _setValue($value)
        {
            return parent::_setValue(new Zend_Date($value));
        }
     
        public function isValid($value)
        {
            $this->_setValue($value);
     
            if ($this->_inclusive) {
                if ($this->_value->compare($this->_min) < 0 or $this->_value->compare($this->_max) > 0) {
                    $this->_error(self::NOT_BETWEEN);
                    return false;
                }
            } else {
                if ($this->_value->compare($this->_min) <= 0 or $this->_value->compare($this->_max) >= 0) {
                    $this->_error(self::NOT_BETWEEN_STRICT);
                    return false;
                }
            }
            return true;
        }
    }

    Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.

    Je n'ai rien à voir avec la société www.ovh.com !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    dans mon controleur si je fais la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($this->getRequest()->isPost())
    {
         $form->setAction($redirection)->setMethod('post');
    }
    quand il y a une erreur je reste bien sur ma page avec le message d'erreur
    mais je suis obligé de cliquer 2 fois sur le bouton pour avoir la redirection quand il n'y a pas d'erreur

    quelqu'un aurait une solution ?

    merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Points : 119
    Points
    119
    Par défaut
    un moyen de faire une redirection serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_redirect($redirection); // ou $redirection est le lien de ta redirection

  7. #7
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Tu n utilise pas isValid pour vérifier tes formulaires? Car c est cette méthode qui renvoi les messages ou continue et je ne la voit pas dans ton code

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    si si, j'utilise isValid dans mon controleur,

    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
    if ($this->getRequest()->isPost()) 
    		{
    			$formData = $this->getRequest()->getPost();
     
    			if ($form->isValid($formData)) 
    			{			
     
    				$DateDebut = $form->getValue('DateDebut');
    				$DateFin = $form->getValue('DateFin');
     
    				$form->setAction($redirection)->setMethod('post');
     
    			} else 
    			{
     
    				$form->populate($formData);
    			}
     
    		}
    mais je suis obligé de cliquer 2 fois sur le bouton pour avoir la redirection.

  9. #9
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    tu n'as pas besoin du populate c'est utile quand tu récupérer des informations de la base de données normalement c'est automatique par contre à la fin tu devrais passer ton formulaire à la vue et il n'en ai rien.

    Tu ne fais pas de redirection, tu change seulement l'action de ton formulaire c'est donc normal que ça fonctionne au deuxième clique.

    Tu veux rediriger vers quoi et pourquoi?

    Pour rediriger tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_helper->redirector('index');

Discussions similaires

  1. Extraction d'un fichier Excel Entre deux dates (Date debut et Date fin)
    Par M.sarah1988 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/09/2014, 16h02
  2. [RegEx] Comment contrôler si un texte est contenu dans un mot
    Par pierrot10 dans le forum Langage
    Réponses: 6
    Dernier message: 28/01/2014, 16h39
  3. Zone de selection avec date debut et date fin
    Par lanaine07 dans le forum IHM
    Réponses: 1
    Dernier message: 25/05/2011, 08h50
  4. [VB.NET] Lire les dates d'une bd access dans un form Vb.net
    Par Herlece dans le forum Accès aux données
    Réponses: 6
    Dernier message: 03/01/2006, 09h38
  5. Comment faire pour faire glisser un objet dans une form ?
    Par Olun dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2005, 17h49

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