Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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.
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
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:
[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
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 :
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 :
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
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.
[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
amiss a écrit:
merci pour ton aide et tes conseils ;-)
Hors ligne