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 :

Validateur qui fait planter Apache


Sujet :

Zend_Form PHP

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut Validateur qui fait planter Apache
    Bonjour à tous,

    J'ai créé un validateur 'personnalisé' pour tester l'égalité entre un champ mot de passe et un champ confirmation du mot de passe.
    Pour l'instant le validateur est sous la forme d'une classe présente dans le même fichier que le formulaire.
    Quand je clique sur le bouton du formulaire, se déclenche alors une erreur Apache !!
    Voici les codes erreurs :
    L'instruction à "0x0077aaa9" emploie l'adresse mémoire "0x64e6566". La mémoire ne peut être "read".

    Si je désactive l'usage de ce validateur, alors tout se passe à merveille !

    Si quelqu'un à une idée, je suis preneur.

    Merci d'avance.

    Ci dessous vous trouverez le code 'incriminé' :




    Voici le code du 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    class MyPasswordValidator extends Zend_Validate_Abstract
    {
     
        const PASSWORD = 'invalidPasswordEqual';
        const PASSWORD_VOID = 'invalidPasswordVoid';
     
        protected $_messageTemplates = array(
            //self::PASSWORD => "'%value%' doit être égal à %password2%."
            self::PASSWORD => "Les mots de passe doivent être égaux",
            self::PASSWORD_VOID => "Vous devez choisir un mot de passe correct"
        );
     
     
        protected $_password2;
     
     
        protected $_messageVariables = array(
            'password2' => '_password2'
        );
     
     
     
        public function __construct($password2)
        {
            $this->_password2 = $password2;
        }
     
     
        public function isValid($value)
        {
            $this->_setValue($value);
     
            if ($value == FAKE_PASSWORD OR $this->_password2->getValue() == FAKE_PASSWORD)
            {
                $this->_error("invalidPasswordVoid", $this->_messageTemplates);
                return false;
            }
     
        	if ($value != $this->_password2->getValue())
        	{
                $this->_error("invalidPasswordEqual", $this->_messageTemplates);
                return false;
            }
            return true;
        }
    }
    Voici comment j'utilise ce validateur :
    Voici le formulaire où j'utilise ce 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
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    class ProfilForm extends Zend_Form
    {
    	public function init()
        {
        	/*$this->addPrefixPath('forms_validators',
                                 '../application/forms/validators',
                                 'validate');*/
     
     
        	$this->setAttrib("id", "formModif");
        	 ###################################################################
    		$password =  new Zend_Form_Element_Password('password');
    		$password->renderPassword = true;
    	    $password->setAttrib("maxlength", "30");
    	    $password->setAttrib("size", "30");
    	    $password->setLabel("Mot de passe : ");
    	    $password->setRequired(true);
    	    //$password->setAllowEmpty(true);
     
    	    $password->setAttrib("onclick","document.getElementById('password').value = ''");
     
     
     
    	    $userNotEmpty = new Zend_Validate_NotEmpty();
    		$userNotEmpty->setMessage('Le mot de passe est requis et ne doit pas être vide.', Zend_Validate_NotEmpty::IS_EMPTY);
     
    		$filterTrim = new Zend_Filter_StringTrim();
    		$password->setFilters(array($filterTrim));
     
    		$validLength = new Zend_Validate_StringLength(6, 30);
    		$validLength->setMessage("Le mot de passe est trop court (6 minimum)", Zend_Validate_StringLength::TOO_SHORT);
    		$validLength->setMessage("Le mot de passe trop long", Zend_Validate_StringLength::TOO_LONG);
    		$validLength->setMessage("Le mot de passe doit être de type <string>", Zend_Validate_StringLength::INVALID);
     
     
    		$password->addValidator($userNotEmpty);
    		$password->addValidator($validLength);
     
    	    $this->addElement($password);
    	    ###################################################################
     
     
    	    ###################################################################
    		$password2 =  new Zend_Form_Element_Password('password2');
     
    		$password2->renderPassword = true;
    	    $password2->setAttrib("maxlength", "30");
    	    $password2->setAttrib("size", "30");
    	    $password2->setLabel("Mot de passe (Confirmation): ");
    	    $password2->setRequired(true);
     
    	    $password2->setAttrib("onclick","document.getElementById('password2').value = '';");
    	    $userNotEmpty = new Zend_Validate_NotEmpty();
    		$userNotEmpty->setMessage('Le mot de passe est requis et ne doit pas être vide.', Zend_Validate_NotEmpty::IS_EMPTY);
     
    		$filterTrim = new Zend_Filter_StringTrim();
    		$password2->setFilters(array($filterTrim));
     
    		$validLength = new Zend_Validate_StringLength(6, 30);
    		$validLength->setMessage("Le mot de passe est trop court (6 minimum)", Zend_Validate_StringLength::TOO_SHORT);
    		$validLength->setMessage("Le mot de passe trop long", Zend_Validate_StringLength::TOO_LONG);
    		$validLength->setMessage("Le mot de passe doit être de type <string>", Zend_Validate_StringLength::INVALID);
     
    		$password2->addValidator($userNotEmpty);
    		$password2->addValidator($validLength);
    	    $this->addElement($password2);
    	    ###################################################################
    /*APPEL AU VALIDATEUR FOIREUX*/
    	    $password->addValidator(new MyPasswordValidator($password2));
    	    $createPlanif = $this->addElement('submit', 'utilisateur', array(
                'required' => false,
                'ignore'   => true,
                'label'    => 'Modifier les données du profil',
            ));
     
     
    	    $this->addDisplayGroup(array("password", "password2", 'utilisateur'), 'monProfil');
    	    $this->getDisplayGroup('monProfil')->setLegend("Modification du mot de passe");
        }  
    }

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 597
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 597
    Par défaut
    Citation Envoyé par mrjay42 Voir le message
    L'instruction à "0x0077aaa9" emploie l'adresse mémoire "0x64e6566". La mémoire ne peut être "read".
    le serveur Apache est sous Windows ?

    qu'est ce qu'il y a indiqué dans le journal d'erreurs ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut
    Merci de ta réponse
    Là je ne suis pas en mesure de regarder, je pourrais voir ce qu'il en est lundi

    Toujours est il que j'ai trouvé le bout de code qui fait planter dans mon validateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($value == FAKE_PASSWORD OR $this->_password2->getValue() == FAKE_PASSWORD)
    {
           $this->_error("invalidPasswordVoid", $this->_messageTemplates);
           return false;
    }
    En fait c'est l'appel à la constante (pourtant bien définie) qui fait planter Apache.
    Si je remplace la constante par sa valeur (chaine de caractère), alors Apache ne plante plus.
    Mais c'est quand même un comportement étrange, car quel que soit l'état de la constante, rien ne justifie un bug au niveau du serveur web en lui même.

Discussions similaires

  1. [Access 2003] Macro qui fait planter Access
    Par nuriel2 dans le forum Access
    Réponses: 5
    Dernier message: 10/05/2006, 14h00
  2. Supprimer une crontab qui fait planter le server
    Par osmoze dans le forum Administration système
    Réponses: 5
    Dernier message: 31/03/2006, 15h42
  3. 56k qui fait planter le PC
    Par Spack dans le forum Périphériques
    Réponses: 4
    Dernier message: 03/10/2005, 19h35
  4. probleme de requette qui fait planter powergres
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/09/2004, 18h48
  5. Réponses: 12
    Dernier message: 16/03/2004, 14h21

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