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 :

probleme d'envoi de formulaire [ZF 1.11]


Sujet :

Zend_Form PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut probleme d'envoi de formulaire
    Comme je ne suis pas forte en zend je vous demande de bien vouloir m'aider.

    Un autre problème recontré lors de la création de mon premier formulaire.

    On faite qu'on je fais submit pour le formulaire non rempli il m'affiche pour les champs obligatoire un message "la valeur est requise". mais quand je cliques pour la 2ème fois dans la barre de navigation il double le non du controlleur cad :

    http://localhost/projet/public/user/register

    mais apres un 2ème clique le mot user double

    http://localhost/projet/public/user/user/register

    et biensur "Page not found".

  2. #2
    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 : 39
    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
    Bonjour,
    Commence par nous faire voir comment tu construits ton formulaire sinon ça risque d'être compliqué.

    Merci

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Ok, je vous montre ce que j'ai fais mais avant tous je me suis servi par un code que je l'ai trouvé sur la toile et j'essai de l'adapter à mon cas. Il s'agit d'un formulaire de création d'un nouvel utilisateur ci-après le code :

    UserController.php
    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
    81
    82
    83
    84
     
    <?php
     
    class UserController extends Zend_Controller_Action
    {
        public function indexAction()
        {      
            $this->view->RegisterForm = new Application_Form_UserRegister();
     
        }
          public function preDispatch() {
            if (Zend_Auth::getInstance()->hasIdentity()) {
                if ('logout' != $this->getRequest()->getActionName()) {
                    $this->_helper->redirector('index', 'index');
                }
            } else {
                if ('register' == $this->getRequest()->getActionName()) {
                    return false;
                }
                if (isset($_COOKIE['infoUser'])) {
                    $infoUser = unserialize(base64_decode($_COOKIE['infoUser']));
                    $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                    $authAdapter->setTableName('users')
                            ->setIdentityColumn('email')
                            ->setCredentialColumn('password')
                            ->setIdentity($infoUser['email'])
                            ->setCredential($infoUser['password']);
                    $authAuthenticate = $authAdapter->authenticate();
                    if ($authAuthenticate->isValid()) {
                        $storage = Zend_Auth::getInstance()->getStorage();
                        $storage->write($authAdapter->getResultRowObject(null, 'password'));
                        $session = Zend_Registry::get('session');
                        $session->panier =  new Model_Panier_Panier();
                        if ($this->addToCartTemp()) {
                            return $this->_helper->redirector('index','panier');
                        }
                        $this->_helper->redirector('index','index');
                    }
                }
            }
        }
     
        public function registerAction() {
            $this->view->title = "Add New user";
            $form = new Application_Form_UserRegister ( );
            $this->view->form = $form;
            if ($this->_request->isPost ()) {
                $formData = $this->_request->getPost ();
                if ($form->isValid ( $formData )) {
                    $datas = $formData;
                    unset($datas['submit']);
                    unset($datas['password2']);
                    unset($datas['contrat']);
                    $datas['password'] = md5($datas['password']);
                    $email = $datas['email'];
     
                    $datas = array_map('strtolower', $datas);
                    $datas = array_map('ucwords', $datas);
                    $datas['email'] = $email;
                    $Users = new Application_Model_DbTable_Users() ;
     
                    $Users->insert($datas);
     
                    $email = $form->getValue('email');
                    $password = $form->getValue('password');
                    $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                    $authAdapter->setTableName('users')
                            ->setIdentityColumn('email')
                            ->setCredentialColumn('password')
                            ->setCredentialTreatment('MD5(?)')
                            ->setIdentity($email)
                            ->setCredential($password);
                    $authAuthenticate = $authAdapter->authenticate();
                    $storage = Zend_Auth::getInstance()->getStorage();
                    $storage->write($authAdapter->getResultRowObject(null, 'password'));
                    $session = Zend_Registry::get('session');
                    $this->_helper->redirector('index','index');
                }
            }
        }
     
     
     
    }
    Deux formulaires :
    UserRegister.php
    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
    81
    82
    83
    84
     
    <?php
     
    class Application_Form_UserRegister extends Zend_Form
    {
     
        public function init()
        {
            $this->setName('UserRegister');        
            $this->setAction('user/register');
     
            $email = new Application_Form_EText ( 'email', 'Email : ' );
            $email  ->addValidator ( 'EmailAddress' )
                    ->addValidator(new Zend_Validate_Db_NoRecordExists('users','email'));
     
            $password = new Zend_Form_Element_Password ( 'password' );
            $password->setLabel ( 'Mot de passe : ')->setAttrib('maxlength', 10)->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' )->setRequired ( true );
     
            $password2 = new Zend_Form_Element_Password ( 'password2' );
            $password2->setLabel('Vérification du mot de passe : ')->setAttrib('maxlength', 10)->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' );
     
     
     
            $nom = new Application_Form_EText( 'nom', 'Nom : ' );
            $nom->addValidator('StringLength', false, array(6, 20));
     
            $prenom = new Application_Form_EText( 'prenom', 'Prenom : ' );
            $adresse = new Application_Form_EText( 'adresse', 'Adresse : ' );
     
            $codePostale = new Application_Form_EText( 'codePostale', 'Code Postale : ' );
            $codePostale->addValidator(new Zend_Validate_Regex('#[0-9]{2} ?[0-9]{3}#'));
     
            $ville = new Application_Form_EText( 'ville', 'Ville : ' );
     
            $telMobile = new Application_Form_EText( 'telMobile', 'Numéro de téléphone mobile : ' );
            $telMobile->setRequired(false)->addValidator('Digits')->addValidator(new Zend_Validate_StringLength(10));
     
            $telFixe = new Application_Form_EText( 'telFixe', 'Numéro de téléphone fixe : ' );
            $telFixe->setRequired(false)->addValidator('Digits')->addValidator(new Zend_Validate_StringLength(10));
     
            $newsletter = new Zend_Form_Element_Checkbox('newsletter');
            $newsletter->setLabel('je m\'abonne à la newsletter');
     
            $contrat = new Zend_Form_Element_Checkbox('contrat');
            $contrat ->setLabel('j\'accepte les termes de contrat')->setRequired(true);
     
            $submit = new Zend_Form_Element_Submit ( 'submit' );
            $submit->setAttrib ( 'class', 'submitbutton' )->setLabel ( 'Continuer' )->setAttrib('class', 'submit');
     
     
            $elements = array( $email, $password, $password2, $nom, $prenom, $adresse, $codePostale, $ville,  $contrat , $submit);  
     
            $this->addElements( $elements );
        }
     
     
        public function isValid($data) {
            $this->getElement('password')->addValidator(new App_Validate_PasswordMatch($data['password2']));
            if ($this->getElement('email')->getValue() == $data['email']) {
                $this->getElement('email')->removeValidator ( "Zend_Validate_Db_NoRecordExists" );
            }
            return parent::isValid($data);
        }
    }
     
    class App_Validate_PasswordMatch extends Zend_Validate_Abstract
    {
        const PASSWORD_MISMATCH = 'passwordMismatch';
        protected $_compare;
        protected $_messageTemplates = array(
                self::PASSWORD_MISMATCH => "PASSWORD_MISMATCH"
        );
        public function __construct($compare) {
            $this->_compare = $compare;
        }
        public function isValid($value) {
            $this->_setValue((string) $value);
            if ($value !== $this->_compare) {
                $this->_error(self::PASSWORD_MISMATCH);
                return false;
            }
            return true;
        }
    }
    EText.php
    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_EText extends Zend_Form_Element_Text
    {
     
        public function init()
        {
            /* Form Elements & Other Definitions Here ... */
     
        }
        public function __construct($options = null,$label) {
            parent::__construct($options);
     
                        $this->setLabel($label)
                             ->setAttrib('size', 40)
                             ->setAttrib('autocomplete', 'off')
                             ->setAttrib('maxlength', 30)                         
                             ->setRequired(true)
                             ->addFilter('htmlentities')                         
                             ->addValidator('StringLength', false,array(0,60))                
                             ->addFilter('StripTags')
                             ->addFilter('StringTrim');                
        }
     
      }
    register.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo	$this->form;?>
    index.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo	$this->RegisterForm;?>
    Autant de fois quand je clique ssur le bouton continuer dans la barre de navigation m'ajouter user/register

  4. #4
    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 : 39
    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
    Merci d éviter de relancer en si peu de temps.

    Ton problème se situe au niveau du setAction tu dois y mettre /nomodule/nomcontroller/nomaction

    Il faut savoir que si tu soumets sur l action courante tu n as pas besoin d utiliser setAction

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Je dirais Ok pour la remarque .

    Pour le chemin de setAction j'ai essayé de changer le chemin mais sans succés.
    $this->setAction('user/register'); celui il multiplie le controlleur une fois que je clique.
    $this->setAction('../user/register'); Page not Found
    Pour l'architecture de mon dossier est comme ci-dessous je n'ai pas utilisé les modules.
    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
     
    monprojet
           ->Application
                      ->configs
                      ->controllers
                                +ErrorController.php
                                +IndexController.php
                                +UserController.php
                      ->forms
                                +EText.php
                                +UserRegister.php
                      ->languages
                      ->layouts
                      ->models
                      ->views
                             ->Scripts
                                      ->error
                                      ->index
                                      ->user
                                            +index.phtml
                                            +user.phtml
                             ->helpers
                                            +profillink.phtml
           ->Docs
           ->Library
           ->Public
           ->Test
    Merci de m'orienter sur l'erreur que j'ai commise. Et merci pour help.

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    de retour, c'est bon j'ai réglé mon problème.
    Vous savez d'ou provient effectivement le problème. C'est que j'appelle mon formulaire dans 2 endroits differents (index et register).

    Cad que dans la page d'entrée j'ai un lien dite "S'enregister" qui m'amène vers user/index
    et quand je veux lancer mon setAction c'est vers user/register

    Bon normalement cela doit amener vers le même résultat.

    Que pensez vous?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Points : 284
    Points
    284
    Par défaut
    Utilise l'aide url() pour générer le chemin de validation de ton formulaire.

  8. #8
    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 : 39
    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
    Il faudrait y mettre un peu du tiens.

    Quand tu déclares ton formulaire tu fais un setAction en fonction d’où tu te trouves.

    Mais si tu envois vers l'action courante tu peux laisser vide et pas utiliser setAction

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

Discussions similaires

  1. Probleme d'envoi de formulaire :(
    Par billfake dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 30/08/2012, 18h38
  2. Probleme d'envoi formulaire
    Par Ariochs dans le forum Langage
    Réponses: 10
    Dernier message: 07/07/2008, 11h58
  3. Probleme d'envoi de variable dans un formulaire
    Par vivian dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/08/2006, 12h17
  4. Probleme d'envoie de formulaire
    Par wollverine dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/02/2005, 16h29

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