Récupérer le résultat d'une requête SQL en PHP

Résolu
valens1460 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -  
 valens1460 -
Bonjour alors voilà mon soucis je fais un site et j'aimerais que des personnes s'y connecte, mais pour voir si l'identifiant est dans la base, il faut que je récupère le résultat de la requête, mais mon soucis est à ce niveau je pense

j'ai ceci: "la connexion"
$bdd = new PDO('mysql:host="";dbname="","", 'berderochet69');

"la recherche""enfin je pense que le bug est la"
$req = $bdd -> query("SELECT COUNT (*) FROM membre WHERE login ='" . $_POST["login"] . "' and pass_md5='" . $_POST["pass"] . "'");
  $req->execute( array('pseudo'=>$pseudo) );
  $donnees = $req->fetch();

et a la fin j'ai ma condition:
if ($donnees == 0)
  {
   header('Location: membre.php');
  }else
  {
  header('Location: index.php'); 
  }


et une belle page blanche s'affiche :/ donc voilà je demande votre aide

EDIT: Ajout de la coloration syntaxique.
A voir également:

3 réponses

Utilisateur anonyme
 
Bonjour

Je vois deux erreurs.
Une dans la requête : il ne faut pas d'espace entre COUNT et (*). La parenthèse qui suit un nom de fonction mysql doit être collée au nom de la fonction.

L'autre erreur dans l'exploitation du résultat.
$donnees ne contient pas une simple valeur (COUNT(*)) mais un tableau avec un élément (en fait deux , regarde la doc de fetch). Le nombre que tu cherches n'est donc pas $donnees, mais $donnees[0].

[edit] autre erreur : tu fais un execute comme si tu avais une requête préparée, alors que tu as fait un query, ce n'est pas coherent. C'est le login qui semble servir à l'identification, le pseudo joue-t-il un rôle lui aussi dans cette identification ?
1
valens1460
 
oui enfaite c'est login et pass qui doit être retrouver, (me suis tromper dans le nom, login est le speudo)

comme ceci alors?
$req = $bdd -> query("SELECT COUNT(*) FROM membre WHERE login ='" . $_POST["login"] . "' and pass_md5='" . $_POST["pass"] . "'");
$donnees = $req->fetch();
if ($donnees[0] == 0)
{
header('Location: membre.php');
}else
{
header('Location: index.php');
}
0
Utilisateur anonyme
 
As-tu essayé ? La requête devrait marcher si ton $_POST["login"] et ton $_POST["pass"] sont corrects.
Attention cependant. D'après le nom de ton champ pass_md5, tu enregistres dans ta base les signatures MD5 des mots de passe, et non pas les mots de passe en clair. Alors si $_POST["pass"] est directement le champ de ton formulaire, ça ne va pas marcher, il faut mettre md5($_POST["pass"]).

D'autre part, ce serait mieux avec des requêtes préparées car avec ce que tu as écrit, ça va planter si quelqu'un met une apostrophe dans son login:
$req = $bdd -> prepare("SELECT COUNT(*) FROM membre WHERE login =? and pass_md5= MD5(?)"); 
$req -> execute (array ( $_POST["login"],$_POST["pass"])); 
$donnees = $req->fetch(); 
...
1
valens1460
 
ça va toujours pas, mais le count(*) quand je fais mon if($donnees[0]==? (je le compare avec quoi?
0
valens1460
 
C'est bon ça marche je l'ai comparer avec 1 et ça fonctionne il me renvois a la bonne page, et si je fais une erreur il me renvoit bien a l'index, grand merci pour ton aide ;) vraiment je me cassais la tête depuis longtemps
0