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

Résolu/Fermé
valens1460 Messages postés 33 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 16 octobre 2015 - Modifié par Whismeril le 9/05/2015 à 14:14
 valens1460 - 12 mai 2015 à 07:35
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.

3 réponses

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
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
11 mai 2015 à 07:59
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
ça va toujours pas, mais le count(*) quand je fais mon if($donnees[0]==? (je le compare avec quoi?
0
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