Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-05-2013 16:40:26

Yiwen
Membre
Date d'inscription: 30-04-2013
Messages: 20

Zend Select Where And (zend1.11/12)

Bonjour tout le monde,
J'ai éfféctué cette requette en zend mais il prend pas les deux contraintes en compte, il vérifie une seule contraite à la fois.

Code:

if ($ident && $pw){
            //$pw = md5($pw);    
            $result = $user->select()
                 -> where ('id  = ?', '$ident')
                               -> where ('pw1 = ?', '$pw');
            $rows = count($result);    
                if ($rows !== 0){
                  $this->session->nom = $ident;
                    $this->view->msg = $this->session->nom;
                  $this->_helper->redirector('recherche', 'index', null,  array());
                
            }else $this->view->erreur = "Identifiant ou le mot de passe est incorrecte";
            
        }else $this->view->erreur = "Veuillez remplir les deux champs";

Comment faire un AND entre les deux contraintes.
Merci par avance.

Hors ligne

 

#2 02-05-2013 20:18:01

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: Zend Select Where And (zend1.11/12)

bonjour,
je pense que AND n'existe pas en zf.le fait d'enchaîner les clauses WHERE appel implicitement AND(du SQL). Par ailleurs rien ne t'empêche de faire echo $result pour voir la requête SQL générée.
Ensuite la variable $pw est une chaîne de caractère(enfin je suppose), elle doit être échappée(avec quoteInto() par exemple ) avant de la passer dans ta requête. voici une des implémentations de ton code:

Code:

 [lang=php] 
if ($ident && $pw){
            //$pw = md5($pw);    
                      $where = $this->getAdapter()->quoteInto('pw1= ?', $pw);

            $result = $user->select()
                 -> where ('id  = ?', (int)$ident)
                   -> where($where);
            $rows = count(fetchRow($result));    
                if ($rows !== 0){
                    //Ok jeu de resultat retourné

Je te suggère le composant d'authentification(zend_auth) de zend

Dernière modification par amiss (02-05-2013 20:19:40)

Hors ligne

 

#3 03-05-2013 10:39:28

Yiwen
Membre
Date d'inscription: 30-04-2013
Messages: 20

Re: Zend Select Where And (zend1.11/12)

bonjour @amiss,
Dans ta réponse tu fais appel la methode getAdapter->quoteInto , j'arrive pas à les instancier ou à les appeler.
Pour la connexion à la base j'ai directement déclaré le code suivant dans le fichier .ini :

Code:

 
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = 
resources.db.params.dbname = opec

il suffit alors d'instancie le model de la table pour avoir accès.
voici le code de mon controleur d'identification :

Code:

 public function indexAction()
    
    {

            
        $request = $this->getRequest();
        $form = new Application_Form_Identify();
        $post = $request->getPost(); // This contains the POST params
        
        /**
         * Check if form was sent
        */
        if ($request->isPost()) {
            /**
             * Check if form is valid
             */
            
            $ident =  htmlspecialchars(trim($post['identifiant'])) ;        
            $mot_de_passe =  htmlspecialchars(trim($post['mot_de_passe']));
            $user =    new Application_Model_DbTable_Utilisateurs();
        if ($ident && $mot_de_passe){
            $pw = md5($mot_de_passe);    
            $result = $user->select()
                                             -> where ('id  = ?', $ident)
                               -> where ('pw1 = ?', $pw);
            
                $rows = count($result);    
             echo $result.'   '.$rows; 
// affiche : SELECT `utilisateurs`.* FROM `utilisateurs` WHERE (id = 'kgrr8783') AND (pw1 = 'cdaa6716746fb685734abde87f1b08ad')      1
                  if ($rows == 1){
            
                            $this->session->nom = $ident;
                    $this->view->msg = $this->session->nom;

                //  $this->_helper->redirector('recherche', 'index', null,  array());
                
            }else $this->view->erreur = "Identifiant ou le mot de passe est incorrecte";
            
        }else $this->view->erreur = "Veuillez remplir les deux champs";    
                
            
                
             }
        
        $this->view->form = $form;
                        
        
    }

je ne sais pas comment pourrai je utiliser l'adaptateur et faire appel a quoteInto??

merci.

Hors ligne

 

#4 03-05-2013 14:03:48

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: Zend Select Where And (zend1.11/12)

ah oui ta requête est dans le contrôleur alors que logiquement elle devrait être dans le modèle. Dans ton cas tu peux invoquer getAdapter() sur l'objet $user. Je viens de m'arperçevoir que le champ id ta table utilisateurs est une chaîne de caractère et non un Int  donc il faut aussi échapper la variable $ident.

Code:

[lang=php]

if ($ident && $pw){
          $db = $user->getAdapter();
            //$pw = md5($pw);    

            $result = $user->select()
                   -> where($db->quoteInto('id = ?', $ident))
                   -> where($db->quoteInto('pw1 = ?', $pw));
            $rows = count(fetchRow($result));    
                if ($rows !== 0){
                    //Ok jeu de resultat retourné

il faut virer htmlspecialchars c'est destiné à l'affichage(dans la vue) et non à filtrer les données entrantes.
Ensuite il faut donner des noms variables parlants(ex: $identifiant à la place de $id, $password à la place de $pw...)

Dernière modification par amiss (03-05-2013 14:07:32)

Hors ligne

 

#5 03-05-2013 14:13:18

Yiwen
Membre
Date d'inscription: 30-04-2013
Messages: 20

Re: Zend Select Where And (zend1.11/12)

amiss a écrit:

merci pour ton aide et tes conseils ;-)

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