besoin d'aide pour une authentification

totie
Invité n'ayant pas de compte PHPfrance

11 avr. 2007, 12:13

Bonjour,

Je tente depuis un moment de créer une authentification en PHP avec cryptage du mot de passe avec la fonction md5 (il parait que c'est facile, mais quand on débute ça ne l'est pas tant que ça! #-o ).
J'aurais besoin de votre aide car je rencontre un problème. Quand je teste ma page voici le message qui s'affiche:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/125/sdb/b/8/agnesgilly/test/validate.php on line 26
identifiant ou mot de passe invalide.


voici mon code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Document sans titre</title> 
</head> 

<body> 

<?php 
include("connexion.php"); 


//Connection à mysql et sélection de la base de données 
$select = mysql_select_db($utilisateur); 
  
//Préparation de la requête 

  
 $query = "SELECT * FROM utilisateur 
WHERE Login=".$_POST['Login']." AND MotPasse=md5(".$_POST['MotPasse'].")"; 


//exécution de la requête et récupération du nombre de résultats 
$result = mysql_query($query); 
$num_rows = mysql_num_rows($result);//voici la ligne 26 

//S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer 
if($num_rows == 1) { 
echo 'Vous êtes authentifié'; 
} 
else 
{ 
echo 'identifiant ou mot de passe invalide.'; 
} 
  
?> 

</body> 
</html> 

J'ai commenté la ligne 26 pour que vous puissiez la repérer facilement.
Votre aide sera précieuse :)

Caroline. :priere:

Mammouth du PHP | 1353 Messages

11 avr. 2007, 12:17

Bonjour,

le problème vient de ta requete :
$query = "SELECT * FROM utilisateur  
WHERE Login=".$_POST['Login']." AND MotPasse=md5(".$_POST['MotPasse'].")"; 
Premièrement je suppose que Login est une valeur "TEXT" donc il faudrait l'entourer de ' ' pour la comparaison (attention aussi a ce que le champ ait une majuscule dans la base)

Deuxiemement la fonction md5() est une fonction php et non pas SQL, il faut donc la sortir de la requete. De meme MotPasse est surement un champ texte, donc a entourer avec des ' '. Une requete de ce type devrait etre plus appropriée :
$query = "SELECT * FROM utilisateur  
WHERE Login='".$_POST['Login']."' AND MotPasse='".md5($_POST['MotPasse'])."'"; 
Lorsque tu as un message d'erreur de ce type je te conseille de faire un echo de ta requete et tu verras les problèmes plus facilement ;). Aussi et surtout jette un coup d'oeil du coté de la fonction or die(mysql_error()); à ajouter apres les mysql_query.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

totie
Invité n'ayant pas de compte PHPfrance

11 avr. 2007, 17:31

Bonjour et merci pour votre réponse!
En effet, elle me règle mon problème :) , mais malhereusement j'en rencontre un nouveau. :(
J'ai modifié mon code en suivant plusieurs conseils et il est maintenant comme ceci:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Document sans titre</title> 
</head> 

<body> 

<?php 
include("connexion.php"); 


//Connection à mysql et sélection de la base de données 
$select = mysql_select_db($utilisateur); 
  
//Préparation de la requête et protection des données 

$query = "SELECT * FROM utilisateur  
WHERE Login='".mysql_real_escape_string($_POST['Login'])."' AND MotPasse=md5('".mysql_real_escape_string($_POST['MotPasse'])."')"; 

//exécution de la requête et récupération du nombre de résultats 
$result = mysql_query($query) or die('erreur '.mysql_error()); 
$num_rows = mysql_num_rows($result); 


//S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer 
if($num_rows == 1) { 
echo 'Vous êtes authentifié'; 
} 
else 
{ 
echo 'identifiant ou mot de passe invalide.'; 
} 
  
?> 

</body> 
</html> 
Maintenant quand je fais le test avec mon login et mot de passe, il ne me reconnait pas...

c'est à n'y rien comprendre. Je vous remercie encore une fois et par avance pour votre aide et votre rapidité de réponse!

Caroline.

Mammouth du PHP | 1353 Messages

11 avr. 2007, 17:37

les ' dans MotPasse = sont mal placés...

Essaye comme ceci :
$query = "SELECT * FROM utilisateur   
WHERE Login='".mysql_real_escape_string($_POST['Login'])."' AND MotPasse='".md5(mysql_real_escape_string($_POST['MotPasse']))."'";  
Tell me and I forget. Teach me and I remember. Involve me and I learn.

totie
Invité n'ayant pas de compte PHPfrance

11 avr. 2007, 17:53

j'ai corrigé cette erreur, et j'ai beau examiné mon code dans tous les sens, ça ne fonctionne toujours pas; ça me répond que mon mot de passe ou login sont invalides.

Je précise quand même que je n'utilise pas de formulaire d'inscription. Pour tester mon authentification j'ai inséré mes login et mot de passe directement dans la base de données...Peut-être que cette précision éclairera quelque chose que je n'ai pas vu! :oops:

Mammouth du PHP | 1353 Messages

11 avr. 2007, 17:57

j'ai inséré mes login et mot de passe directement dans la base de données...
ca ne devrait rien changer si tu as bien insérer ton mot de passer après un traitement md5()... :d

Sinon as tu testé tes valeurs $_POST ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

totie
Invité n'ayant pas de compte PHPfrance

12 avr. 2007, 17:18

Et oui, j'avais tellement la tête dans le code que j'avais tout simplement oublié de faire un md5 avant d'insérer le mot de passe dans la base! |*()

Avec ce code tout marche bien \:D/ :
<?php
include("connexion.php");


//Connection à mysql et sélection de la base de données
$select = mysql_select_db($utilisateur);
 
//Préparation de la requête et cryptage du mot de passe
$query = "SELECT * FROM utilisateur    
WHERE Login='".mysql_real_escape_string($_POST['Login'])."' AND MotPasse='".md5($_POST['MotPasse'])."'"; 

//exécution de la requête et récupération du nombre de résultats
$result = mysql_query($query) or die('erreur '.mysql_error());
$num_rows = mysql_num_rows($result);


//S'il y a exactement un résultat, l'utilisateur est authentifié, sinon, on l'empêche d'entrer
if($num_rows == 1) {
echo 'Vous êtes authentifié';
}
else
{
echo 'identifiant ou mot de passe invalide.';
}
 
?>
Merci beaucoup pour ton aide! j'en ai appris beaucoup!

Caroline.