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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    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 confirmé
    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
    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
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    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 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    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
    Membre averti
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    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 confirmé
    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
    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

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