Page 1 sur 1

besoin d'aide pour une authentification

Posté : 11 avr. 2007, 12:13
par totie
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:

Posté : 11 avr. 2007, 12:17
par guilt92
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.

réponse

Posté : 11 avr. 2007, 17:31
par totie
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.

Posté : 11 avr. 2007, 17:37
par guilt92
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']))."'";  

réponse

Posté : 11 avr. 2007, 17:53
par totie
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:

Re: réponse

Posté : 11 avr. 2007, 17:57
par guilt92
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 ?

réponse

Posté : 12 avr. 2007, 17:18
par totie
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.