[RESOLU] erreur mysqli_fetch_array()

Eléphanteau du PHP | 10 Messages

04 mai 2015, 11:02

Bonjour,

Je suis actuellement en train de travailler sur une application php ou j'ai besoin d'une gestion des utilisateurs.
J'ai une page pour la connexion de ces derniers, elle fonctionne lorsque je passe le mot de passe en dur seulement lorsque je hache le mot de passe (avec md5() ) une erreur apparait :

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given

Je n'ai pas réussi à résoudre le problème et ne voit pas trop d’où il vient, voici un extrait de mon code :

Code : Tout sélectionner

$sql = 'SELECT count(*) FROM utilisateur WHERE identifiant='.$id.' AND password='.md5($password).''; $req = mysqli_query($conn_objet_perdu,$sql); if(!$sql){ die('Erreur sql'.mysql_error()); } if($sql){ $data = mysqli_fetch_array($req); } mysqli_free_result($req); mysqli_close($conn_objet_perdu); // si on obtient une réponse, alors l'utilisateur est un membre if ($data[0] == 1) { session_start(); $_SESSION['login'] = $_POST['login']; echo 'bien joué'; } // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son identifiant, soit dans son mot de passe elseif ($data[0] == 0) { $erreur = 'Compte non reconnu.'; }

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mai 2015, 11:11

Salut tu ne testes pas la bonne variable pour savoir si la requête c'est bien exécutée.
Il faut tester $req pas $sql.
$sql est une chaine de caractères (la requête) et retournera toujours true.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

04 mai 2015, 11:23

d'accord, en effet cela ne m'affiche plus l'erreur de départ et à priori c'est ma requête qui ne fonctionne pas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mai 2015, 12:09

Effectivement, ta requête SQL est erronée, le mot de passe une fois crypté en md5 devrait être entouré d'apostrophes pour délimiter cette chaine dans ta requête. Il faut dont prévoir les apostrophes dans la génération de la requête :
$sql = 'SELECT count(*) FROM utilisateur WHERE identifiant=' . $id . ' AND password=\'' . md5($password) . '\'';
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...