Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-03-2012 23:10:24

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Un eclairissement sur l'insertion des données via zend

Bonjour tous le monde;

Comme je m'autoforme sur Zend Framwork, j'ai trouvé sur la toile une application bien faite. J'arrive à l'installer et de la faire tourner sur mon localhost. J'essai maintenant à décortiquer le code mais je me trouve coincer sur le faite comment il insére les données dans la base de données je dis bien quand je fais des tests d'insertion cela marche à merveille. Il s'agit d'ajout d'un User. Alors quand je me suis rendu sur la classe   Model_DbTable_Users biensur qui se trouve model\DbTable\users.php elle completement vide.

Code:

<?php

class Model_DbTable_Users extends Zend_Db_Table_Abstract {

    protected $_name = "users";

}

?>

et dans UserController.php j'ai ce code

Code:

    public function registerAction() {
        $form = new Model_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['cgv']);
                $datas['password'] = md5($datas['password']);
                $email = $datas['email'];
                $datas = array_map('strtolower', $datas);
                $datas = array_map('ucwords', $datas);
                $datas['email'] = $email;
                $Users = new Model_DbTable_Users();
                                
                $Users->insert($datas);
               /* $mail = new Zend_Mail();
                $mail->setBodyHtml('Nous avons bien pris en compte votre inscription au site');
                $mail->setFrom($email, 'TP1-Ecommerce');
                $mail->addTo($email);
                $mail->setSubject('Bienvenue sur TP1-Ecommerce');
                $mail->send();*/
                $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');
                $session->panier =  new Model_Panier_Panier();
                if ($this->addToCartTemp()) {
                    return $this->_helper->redirector('index','panier');
                }
                $this->_helper->redirector('index','index');
            }
        }
    }

Le formulaire est composé des éléments suivant :
UserRegister.php

Code:

<?php

class Model_Form_UserRegister extends Zend_Form {

    public function init() {

        $this->setName ( 'UserRegister' );
        $this->setAction('../user/register');

        $email = new Model_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 : ')->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' )->setRequired ( true );

        $password2 = new Zend_Form_Element_Password ( 'password2' );
        $password2->setLabel ( 'Vérification du mot de passe : ' )->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' );

        $nom = new Model_Form_EText ( 'nom', 'Nom : ' );
        $prenom = new Model_Form_EText ( 'prenom', 'Prénom : ' );
        $adresse = new Model_Form_EText ( 'adresse', 'Adresse : ' );
        $codePostale = new Model_Form_EText ( 'codePostale', 'Code Postale : ' );
        $codePostale->addValidator(new Zend_Validate_Regex('#[0-9]{2} ?[0-9]{3}#'));
        $ville = new Model_Form_EText ( 'ville', 'Ville : ' );
        $telMobile = new Model_Form_EText ( 'telMobile', 'Numéro de téléphone mobile : ' );
        $telMobile->setRequired(false)->addValidator('Digits')->addValidator(new Zend_Validate_StringLength(10));
        $telFixe = new Model_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('En cochant cette case, je m\'abonne à la newsletter');
        $cgv = new Zend_Form_Element_Checkbox('cgv');
        $cgv ->setLabel('En cochant cette case, j\'accepte les CGV')->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,$telMobile,$telFixe,$newsletter,$cgv ,$submit );
        $this->addElements ( $elements );
    }

Est ce que cette ligne $formData = $this->_request->getPost (); est un tableau qui contient tous les champs à inserer dans la table users ? Est ce que c'est facon pour proteger mes champs contre toutes les intrusions malveillantes?

Merci de m'éclairer ce qui se passe.

Hors ligne

 

#2 23-03-2012 09:15:46

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: Un eclairissement sur l'insertion des données via zend

Alors ça c'est pas une bonne pratique déjà pour commencer!

Code:

        if ($this->_request->isPost ()) {
            $formData = $this->_request->getPost ();
            if ($form->isValid ( $formData )) {
                $datas = $formData;

Le fait de récupérer directement les données $_POST : $datas = $formData;

Alors que quand tu valides ton formulaire juste avant, les données sont vérifiées et filtrées si tu as mit des filtres dans ton formulaire.

Je te conseille donc de récupérer les données validées comme suit:

Code:

        if ($this->_request->isPost ()) {
            $formData = $this->_request->getPost ();
            if ($form->isValid ( $formData )) {
                $datas = $form->getValues();

Ensuite pour l'insertion, rien de compliqué dans ton exemple.
C'est fait comme ceci:

Code:

                $Users = new Model_DbTable_Users();
                                
                $Users->insert($datas);

L'insertion se fait via Zend_Db_Table, les données sont protégées avant leur insertion en base.

Par contre, tu fais un ucwords sur toutes les données, y compris le MD5 de ton mot de passe, c'est pas très propre comme procédé. Le mieux serait de faire du cas par cas. Je dit ça, je dit rien... c'est un conseil !

Dernière modification par Roromix (23-03-2012 09:22:12)

Hors ligne

 

#3 23-03-2012 17:22:25

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Re: Un eclairissement sur l'insertion des données via zend

Merci beaucoup pour l'éclaircissement. et pour le conseil. je testerai et je reveindrais.

Hors ligne

 

#4 24-03-2012 13:05:58

yelmontaser
Nouveau membre
Date d'inscription: 26-06-2009
Messages: 8
Site web

Re: Un eclairissement sur l'insertion des données via zend

C'est la classe Zend_Db_Table qui s'occupe des opérations CRUD.

Dernière modification par yelmontaser (24-03-2012 13:08:54)

Hors ligne

 

#5 26-03-2012 02:56:08

Bouchra
Membre
Lieu: Montréal
Date d'inscription: 07-12-2011
Messages: 47

Re: Un eclairissement sur l'insertion des données via zend

De retour. Un grand merci pour vous . Maintenant j'ai bien compris le processus d'ajout des données auprès du zend. D'abord la récupération des données à par d'un formulaire et l'appel du controlleur d'ajout qui lui aussi appelle la classe Zend_Db_Table pour l'insertion. J'essai de m'autoformer sur Zend s'il y a queque chose qui m'échape je reviendrais chez vous. cool

Hors ligne

 

#6 22-04-2012 09:52:27

chuying0810
Membre
Date d'inscription: 17-04-2012
Messages: 15

Re: Un eclairissement sur l'insertion des données via zend

Alors que quand tu valides ton formulaire juste avant, les données sont vérifiées et filtrées si tu as mit des filtres dans ton formulaire.
http://www.dailyforexrates.info/g.gif

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages