Requete SQL

Résolu
Exileur Messages postés 1475 Date d'inscription   Statut Membre Dernière intervention   -  
Exileur Messages postés 1475 Date d'inscription   Statut Membre Dernière intervention   - 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

le père
 
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   Statut Membre Dernière intervention   150
 
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   Statut Membre Dernière intervention   44
 
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   Statut Membre Dernière intervention   150
 
Salut,
j'ai fais echo "valeur de \$req : $req";

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