Requête PDO Statement

Requête PDO Statement - PHP - Programmation

Marsh Posté le 29-01-2011 à 14:58:10    

Bonjour, j'ai un souci pour la création d'une page de Login/MDP dont voici le code :
 

Code :
  1. // Test des champs Index (isset => test si la variable existe)
  2. If( isset($_POST) && !empty ($_POST['login']) && !empty ($_POST['password'])) {
  3.      //Preparation de la requête
  4.      $passwordRequest = $bdd->prepare('SELECT COUNT(*) FROM USERS WHERE Pseudo=\'?\'');
  5.      $passwordRequest->execute(array($_POST['login']));
  6.      //test du login
  7.     if ($passwordRequest->fetchColumn() > 0) {
  8.          $passwordRequest = $bdd->prepare('SELECT Pseudo, Password FROM USERS WHERE Pseudo=\'?\'');
  9.          $passwordRequest->execute(array($_POST['login']));
  10.          $data = $passwordRequest->fetch();
  11.          //Test du mot de passe
  12.          if($data['Password'] == $_POST['password']) {
  13.              session_start();
  14.              $_SESSION['login'] = $data['Pseudo'];
  15.             $passwordRequest->closeCursor();
  16.             //Redirection vers la page d'accueil
  17.              header('Location : ../Accueil.php');
  18.          }
  19.         else {
  20.              $passwordRequest->closeCursor();
  21.              echo '<p>Mot de passe incorrect !</p>';
  22.              exit;
  23.         }
  24.      }
  25.     else {
  26.          $passwordRequest->closeCursor();
  27.          echo '<p>Pseudo incorrect !</p>';
  28.          exit;
  29.      }
  30.     }


 
Le problème se trouve à ce niveau et mon code ne rentre jamais dans le if malgrés un bon login/mot de passe.

Code :
  1. if ($passwordRequest->fetchColumn() > 0)


 
J'ai regardé dans la doc de PDO et jai essayé pas mal de solutions sans parvenir à un bon résultat, c'est surement une erreur toute bête mais je ne la voie pas ...
 
Auriez vous une solution ?
 


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 29-01-2011 à 14:58:10   

Reply

Marsh Posté le 29-01-2011 à 15:26:16    

Ton algo a aucun sens AMHA :o
Tu n'aurais jamais 2 utilisateurs qui aient le même Pseudo, donc ça sert à rien de les compter.
De plus, ne stocke pas tes mdp en clair dans la base, c'est dangeureux. Stocke les sous forme hashée ( regarde du côté de SHA1 )


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-01-2011 à 15:29:13    

Pourtant cet algo est issu de pas mal de tuto trouvés sur le net ... enfin cela ne m'explique pas pourquoi mon code ne tourne pas ...


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 29-01-2011 à 15:38:04    

- Je n'en doute pas. Quand on voit le nombre de mauvais tutos PHP sur le net, je suis presque surpris de voir qu'au moins tu utilises PDO :o Par exemple faut m'expliquer pourquoi avoir une condition $passwordRequest->fetchColumn() > 0 , alors que fetchColumn retourne FALSE quand aucune colonne n'est trouvée...
 
- T'es sûr que $_POST['login'] contient bien ce que tu penses?
- T'es sûr que ta base contient bien ce que tu penses ? (t'as vérifié ce qui se passe si t'executes ta requête via PHPMyAdmin par exemple?)
- Et encore une fois (pas à toi, mais je commence à avoir marre de le répéter 15x par semaine ) Apprenez à utiliser un debugger (ou au moins à mette des "echo" et "print_r" là ou il faut pour vérifier ce que contiennent les variables)...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-01-2011 à 15:48:43    

esox_ch a écrit :

-  $passwordRequest->fetchColumn() > 0 , alors que fetchColumn retourne FALSE quand aucune colonne n'est trouvée...


 
Ok je vais essayer de changer ma condition, au départ je voulais mettre un "rowCount" mais regarde ce qui est dit dans ce tuto : http://php.net/manual/fr/pdostatement.rowcount.php
Voilà pourquoi j'ai utilisé le fetchColumn() > 0
 

esox_ch a écrit :


- T'es sûr que $_POST['login'] contient bien ce que tu penses?
- T'es sûr que ta base contient bien ce que tu penses ? (t'as vérifié ce qui se passe si t'executes ta requête via PHPMyAdmin par exemple?)
- Et encore une fois (pas à toi, mais je commence à avoir marre de le répéter 15x par semaine ) Apprenez à utiliser un debugger (ou au moins à mette des "echo" et "print_r" là ou il faut pour vérifier ce que contiennent les variables)...


[/quotemsg]
 
Pour ces éléments là c'est oui j'ai les bases et j'aime faire les choses proprement donc je n'aurais pas créer de post si je n'avais pas fait ces test au préalable.
 
Merci pour ton aide en tout cas


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 29-01-2011 à 15:56:10    

Non mais pourquoi tu ne veux pas faire les choses mieux alors ?
 
- Tu récupères ton login + mdp du form ($_POST, comme tu l'as fait)
- Tu hashes le mdp pour plus de sécurité ( via sha1() )
- Ensuite tu executes : "select password from users where pseudo = ?"
- Si aucune ligne n'est retournée => ton login est faux,
- Si une ligne est retournée, tu compares "password" à ton sha1($_POST['password')  
 
Et voilà :o 1 requête et tout va bien :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-01-2011 à 21:57:48    

Autant comparé si le login + mdp hashé sont bien ceux en bdd direct non  :??:
 
Comme ça si ça renvoie la ligne alors roule ma poule et sinon c'est qu'il a la tête dans l'cul à cause du lundi matin  :o


Message édité par Profil supprimé le 29-01-2011 à 21:59:28
Reply

Marsh Posté le 30-01-2011 à 00:13:33    

Assez d'accord avec toi sur le principe :bounce: mais au vu du code qu'il a écrit plus haut, je pense qu'il veut faire la distinction utilisateur invalide VS password invalide


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 30-01-2011 à 10:11:12    

En général j'évite de faire ça parce que du coup ça donne une info supplémentaire à la personne qui voudrait tenter de voler le compte d'une personne.

Reply

Marsh Posté le 30-01-2011 à 10:34:53    

Idem. Mais il y a des sites qui le font..
À part ça, le fait de faire la comparaison du MDP dans la BDD ou dans le PHP, à mon avis c'est assez équivalent niveau performances. J'pense que c'est plus une question de goûts qu'autre chose.
Par contre clairement sa manière de faire n'a aucune logique


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 30-01-2011 à 10:34:53   

Reply

Marsh Posté le 30-01-2011 à 19:18:33    


 
Effectivement je n'avais pas pensé à ça !


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed