Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1163 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requête PDO Statement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête PDO Statement

n°2052880
spolnix
Posté le 29-01-2011 à 14:58:10  profilanswer
 

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.
mood
Publicité
Posté le 29-01-2011 à 14:58:10  profilanswer
 

n°2052881
esox_ch
Posté le 29-01-2011 à 15:26:16  profilanswer
 

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
n°2052882
spolnix
Posté le 29-01-2011 à 15:29:13  profilanswer
 

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.
n°2052885
esox_ch
Posté le 29-01-2011 à 15:38:04  profilanswer
 

- 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
n°2052889
spolnix
Posté le 29-01-2011 à 15:48:43  profilanswer
 

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.
n°2052892
esox_ch
Posté le 29-01-2011 à 15:56:10  profilanswer
 

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
n°2052938
Profil sup​primé
Posté le 29-01-2011 à 21:57:48  answer
 

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
n°2052952
esox_ch
Posté le 30-01-2011 à 00:13:33  profilanswer
 

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
n°2052971
Profil sup​primé
Posté le 30-01-2011 à 10:11:12  answer
 

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.

n°2052973
esox_ch
Posté le 30-01-2011 à 10:34:53  profilanswer
 

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
mood
Publicité
Posté le 30-01-2011 à 10:34:53  profilanswer
 

n°2053047
spolnix
Posté le 30-01-2011 à 19:18:33  profilanswer
 


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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requête PDO Statement

 

Sujets relatifs
requete sqlrequete SQL qui ne donne pas le bon resultat
Requete de modification[VBA Access] Gérer valeur null d'une requête
Requete trop lourde comment faireRequête SQL selon conditions
Req sur 3 fichiers Excel - Comment s'utilise RechercheV en VBA svp ?requête POST
Problème pour créer la requête SQL demandée[SQL] "Arrêter prématurément" une requête
Plus de sujets relatifs à : Requête PDO Statement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR