Code pour identification ne fonctionne pas... md5 ?

Eléphanteau du PHP | 28 Messages

10 août 2007, 16:38

Bonjour !

J'ai écrit un petit programme d'identification avec pseudo et mot de passe, mais à chaque fois que j'entre le mot de passe, le programme dit qu'il est faux... Mais j'ai vérifié dans phpMyAdmin, tout y est, et je n'ai pas fait d'erreur concernant les noms des champs et des variables.

Voici les lignes qui posent problème (à chaque fois que je les commente ou que je les enlève, le code fonctionne, sauf qu'alors on fait comme si il n'y avait pas de mot de passe...) :
$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin'  AND mdpasse = '$mdpasselogin' ";
Si je tape uniquement :
$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin' ";
Le progamme fonctionne.




J'ai donc essayé autrement :
while($row = mysql_fetch_assoc($result)){
	
		if ($row["pseudo"] == $pseudologin AND $row["mdpasse"] == ($mdpasselogin))
			{
			echo 'allow=1' ;
			}
		else
			{
			echo 'allow=0' ;
			}
		}
Mais une fois de plus, il faut que j'enlève :
AND $row["mdpasse"] == ($mdpasselogin)
pour que ça fonctionne...

Au début du programme, j'écris :
if(isset($_POST['pseudologin'])) $pseudologin=utf8_decode(($_POST['pseudologin']));
	if(isset($_POST['mdpasselogin'])) $mdpasselogin=md5(utf8_decode(($_POST['mdpasselogin'])));
Est-ce que le problème vient de md5 ?
Sinon, quelle pourrait être la cause de l'impossibilité d'ajouter le code pour le mot de passe ?

Merci pour votre aide ! :)
Modifié en dernier par SecondSight le 10 août 2007, 16:41, modifié 1 fois.
SecondSight
---------------------------
Je ne suis pas du tout expert en la matière. Mon métier, c'est instituteur, pas informaticien, mais je veux bien apprendre, quand j'en ai le temps. :-)
Le site de mes élèves :
http://www.bellepierre.info

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 août 2007, 16:40

Est-ce que les mots de passes stockés en base de données sont cryptés ?
Si c'est le cas, il faut que tu cryptes également le mot de passe saisi par l'utilisateur. ;)

Si non, pourquoi nous parles tu de md5 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

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

10 août 2007, 16:43

Tout pareil que Zeus :)

Et pis en cas de doute, affiche la requête que tu génères. Tu verras ce que tu lui demandes de rechercher et tu pourras aller vérifier en base si la valeur existe belle et bien :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

10 août 2007, 16:45

Oui, les mots de passe sont cryptés.

Il me semble que je crypte également ceux entrés par l'utilisateur quand il s'identifie, au début du programme :
 if(isset($_POST['pseudologin'])) $pseudologin=utf8_decode(($_POST['pseudologin']));
	if(isset($_POST['mdpasselogin'])) $mdpasselogin=md5(utf8_decode(($_POST['mdpasselogin'])));
	
	$query = "SELECT * FROM $table WHERE pseudo = '$pseudologin' ";// AND mdpasse = '$mdpasselogin' ";
	$result = mysql_query ($query) or die("Erreur dans Web Des Ecoles: " . mysql_error());
	$num = mysql_num_rows( $result ) ;
Mais ça ne marche pas...
SecondSight
---------------------------
Je ne suis pas du tout expert en la matière. Mon métier, c'est instituteur, pas informaticien, mais je veux bien apprendre, quand j'en ai le temps. :-)
Le site de mes élèves :
http://www.bellepierre.info

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 août 2007, 16:51

lors de l'ajout de l'utilisateur dans la base de donnée, est-ce que tu as utilisé la fonction md5 de MySQL ou de PHP ?

Si c'est celle de MySQL, utilise la même chose pour l'interrogation, à savoir

Code : Tout sélectionner

SELECT * FROM $table WHERE pseudo = '$pseudologin' AND mdpasse = md5('$mdpasselogin')
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 28 Messages

10 août 2007, 17:02

lors de l'ajout de l'utilisateur dans la base de donnée, est-ce que tu as utilisé la fonction md5 de MySQL ou de PHP ?
Et bien, je ne sais pas... :oops: Je pense que j'ai utilisé celle de PHP :
	// Réception des données depuis Flash
	if(isset($_POST['pseudo'])) $pseudo=utf8_decode(($_POST['pseudo']));
		else $pseudo="inconnu";
	if(isset($_POST['mdpasse1'])) $mdpasse1=md5(utf8_decode(($_POST['mdpasse1'])));//md5 crypte le mot de passe
		else $mdpasse1="inconnu";
	if(isset($_POST['email1'])) $email1=utf8_decode(($_POST['email1']));
		else $email1="inconnu";
		
	// la date au format yyyy-mm-dd 
	$date = date ("Y-m-d H:i:s",time());
	
	//Réalisation de la requête
	$query = "INSERT INTO $table (Num, pseudo, mdpasse, email, regdate) VALUES ('','$pseudo', '$mdpasse1', '$email1', '$date')";

	$result = mysql_query($query,$DBConn) or die("Erreur : " . mysql_error());
Et pis en cas de doute, affiche la requête que tu génères.
Je ne sais pas le faire... J'ai essayé avec alert, print et echo (dans les fichiers PHP), mais comme c'est avec du flash ça ne marche pas...

Du coup j'ai simplement intégré une petite fonction mail qui m'envoyait par mail les infos dont j'avais besoin.

J'ai fini par trouver l'origine du problème :
le champ de mot de passe dans la base de données avait une longueur maximale de 30 caractères, alors que le mot de passe crypté en faisait 32.
Quand j'ai regardé de plus près, j'ai vu la différence, j'ai changé la longueur du champ mot de passe à 60 et maintenant ça fonctionne. :)

Quelle doit donc être la longueur d'un champ mot de passe ?

Merci pour votre aide ! :)
SecondSight
---------------------------
Je ne suis pas du tout expert en la matière. Mon métier, c'est instituteur, pas informaticien, mais je veux bien apprendre, quand j'en ai le temps. :-)
Le site de mes élèves :
http://www.bellepierre.info

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

10 août 2007, 17:22

Tu utilises effectivement la fonction md5() de php d'après le code de tes insertions :)

Avec md5, quel que soit le mot de passe, celui-ci sera transformé en un nombre de 32 caractères hexadécimaux (de 0 à 9 ou de A à F). Si tu préfères utiliser sha1, le résultat sera une chaine de 20 à 40 caractères.

Bref, il n'y a pas de longueur spécifique, tout dépend de la méthode de chiffrage que tu utilises :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 28 Messages

10 août 2007, 17:25

Merci pour votre aide. :)
SecondSight
---------------------------
Je ne suis pas du tout expert en la matière. Mon métier, c'est instituteur, pas informaticien, mais je veux bien apprendre, quand j'en ai le temps. :-)
Le site de mes élèves :
http://www.bellepierre.info