Requete SQL

Résolu/Fermé
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - Modifié par Exileur le 31/10/2011 à 00:31
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 31 oct. 2011 à 13:26
Bonjour à tous,

Alors voila, je suis en train d'essayer de creer un formulaire de connexion sur un espace membre, mais lorsque je rentre un nom d'utilisateur erroné dans le formulaire user, j'obtiens l'erreur suivante:
Warning: mysql_fetch_array() expects parameter 1 to be resource
:/

Voila le code que j'ai :

if(isset($_POST['username'], $_POST['password'])){

if(get_magic_quotes_gpc()) {
$ousername = stripslashes($_POST['username']);
$username=mysql_real_escape_string(stripslashes($_POST['username']));
$password = stripslashes($_POST['password']);}

else{
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];}

$req = mysql_query('select password,id from users where username="'.$username.'"');

$dn = mysql_fetch_array($req); <-----------------------------

if($dn['password']== $password and mysql_num_rows($req)>0){

//On crée la session }

else{
$form = true;
$message = 'La combinaison que vous avez entré n\'est pas bonne.';
}
}

Je pense que c'est parce que $req est null et que du coup on peut pas rentrer une valeur null dans un tableau (?)

Merci pour votre aide

Cordialement
Exileur



N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.

2 réponses

Bonjour

Si tu as ce message, c'est qu'il y a une erreur dans l'exécution de ta requête. Pour avoir un message un peu plus explicite, essaye :
$req = mysql_query('select password,id from users where username="'.$username.'"') or die(mysql_error());

Au passage, tu ferais mieux de mettre le nom ET le mot de passe, dans ton WHERE, ça t'éviterait d'avoir à tester le mot de passe séparément
$req = mysql_query('select id from users where username="'.$username.'" AND password="'.$password.'"') or die(mysql_error());

Toujours au passage, c'est une très bonne habitude d'utiliser mysql_real_escape_string sur toutes les données qui viennent de l'extérieur. Pourquoi ne le faire qu'à moitié et ne se pas protéger du mot de passe ?
1
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
31 oct. 2011 à 13:26
Salut "papa", ;)

J'ai suivis tes instructions, et l'erreur retourner est "no database selected"...
Je vais me pendre...
Effectivement, j'ai oublier d'insérer la commande mysql_select_db dans mon fichier de config.
Magique, en sélectionnant ma DB, tout fonctionne parfaitement =D

Merci pour tes observations, je vais échappé ma variable password, ça serai bête d'avoir une faille xss aussi simple --'
Et faire la vérification login/pass en une seule fois.

Cordialement
Exileur
0
jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
31 oct. 2011 à 01:15
Hmm normalement même si il n'y a pas de lignes retournées, le tableau devrait être vide, mais ne pas retourné d'erreur.
Il faudrait tester ce que contient la requête en faisant :
echo 'select password,id from users where username="'.$username.'"';
Juste avant le mysql_fetch_array().
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
Modifié par Exileur le 31/10/2011 à 13:09
Salut,
j'ai fais echo "valeur de \$req : $req";

est j'obtiens : "Valeur de $req : "
La variable est donc null.
0