Page 1 sur 1

problème de login causé par PASSWORD

Posté : 17 janv. 2006, 20:49
par supernova
Bonjour,

J'ai créé une table 'utilisateurs' contenant les données relatives aux différents membres (nom, prénom, mot de passe).

Cette table est remplie à l'aide du code suivant:
$rq="INSERT INTO utilisateurs".
"(nom_utilisateur, prenom, nom, email, mot_de_passe, date_enreg)".
"VALUES('$nu','$pr','$no','$em',PASSWORD('$mp'),NOW())";
$result=@mysql_query($rq);
je contrôle que ma table a bien été remplie dans phpmyadmin

ensuite, pour qu'un utilisateur puisse se logger, j'utilise ce code:
$rq="SELECT id_utilisateur, prenom FROM utilisateurs WHERE nom_utilisateur='$u' AND mot_de_passe=PASSWORD('$mp')";
$result=@mysql_query($rq);
$ligne=mysql_fetch_array($result, MYSQL_NUM);
et je ne peux pas me logger car la condition portant sur le password m'en empèche


Quelqu'un pourrait il m'expliquer quelle est la cause de ce problème?

J'espère avoir donné assez d'informations, sinon n'hésitez pas à me solliciter pour vous apporter les éléments dont vous avez besoin.

merci pour vos réponses.

Posté : 17 janv. 2006, 23:21
par Cyrano
Est-ce que la colonne où est stocké le mot de passe est bien du type PASSWORD ?

D'autre part pour débugguer, il faut éviter d'utiliser le "@" devant les fonctions : masquer les erreurs ne t'aidera pas à corriger.

Posté : 17 janv. 2006, 23:58
par supernova
merci pour ces informations.

je débute en sql donc toute remarque m'est utile.
La colonne où est stockée le mot de passe est de type:

Code : Tout sélectionner

VARCHAR( 16 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
en lisant directement le password dans phpmyadmin, j'obtiens:
'2f37d4566b7ffec8'.

je ne sais pas si cela correspond au type PASSWORD

par ailleurs, aucun message d'erreur ne m'est retourné après avoir supprimé le '@'.


Sinon, je viens de constater que dans mon livre de cours il est écrit que le champ 'password' doit etre de type 'CHAR' et non 'VARCHAR'.
Or lorsque je modifie le type en 'CHAR' dans phpmyadmin, la mise à jour ne se fait pas et le type reste 'VARCHAR'.
Ceci peut il être la cause du problème?

Posté : 18 janv. 2006, 00:05
par Cyrano
Si tu changes le type en CHAR, il ne faut pas oublier de mettre une longueur de la même manière que tu emts VARCHAR(16)

Ceci dit, 16, c'est un peu court et probablement la cause du problème: si la taille du champ est trop courte, la valeur envoyée qui est trop longue sera tronquée: résultat sur un mot de passelca validation en pourra jamais fonctionner. Pour un mot de passe crypté, utilise au minimum un VARCHAR (64) ou encore dans certains cas avec d'autres formes de chiffrement un type BLOB.

Posté : 18 janv. 2006, 12:04
par supernova
Désolé de répondre aussi tardivement.

j'ai remplacé 'VARCHAR(16)' par 'VARCHAR(128)' et rien n'y fait, le mot de passe que je saisis pour me logger ne correspond pas à celui qui est stocké dans la bdd.

:cry:

Posté : 22 janv. 2006, 02:04
par natasgfx
dit une question bete dans ton formulaire tu na pas limité la talle du pw a 16 ?

Posté : 22 janv. 2006, 11:21
par Cyrano
...j'ai remplacé 'VARCHAR(16)' par 'VARCHAR(128)' et rien n'y fait, le mot de passe que je saisis pour me logger ne correspond pas à celui qui est stocké dans la bdd....
Attention, remplacer le type ne suffit pas: il faut renouveller les données enregistrées. Les données tronquées avant le changement de TYPE ne seront pas remis à leur longueur d'origine. Il faut donc à nouveau les enregistrer.