Page 1 sur 1

Problème avec strcmp()

Posté : 15 août 2008, 12:10
par KiKoMaSo
Bonjour

Je fais actuellement face à un petit problème avec la fonction strcmp().

Je suis en train de réaliser une interface d'administration pour mon site mais avant je dois m'identifier.
Je rentre un login et un password. De là je me connecte à la base de données mysql afin de vérifier si le login existe puis ensuite si le login existe, je compare le pass associé au login qui est dans la base de données avec celui tapé sur la page précédente lors de l'identification.

J'ai mis le pass en md5 dans la base et avant de comparer je met en md5 le mot de passe que l'utilisateur a rentré.

Je test et cela ne fonctionne pas, donc je mets des echo partout pour voir ce qu'il se passe et là:


//Je mets dans Pwd_Admin le pass en md5 tapé précédemment
$Pwd_Admin = md5($Pass2_Admin);


//Je mets dans Compare le résultat de la comparaison du mot de passe récupéré dans la base de données et le passe tapé en md5
$Compare = strcmp($Pwd_SQL, $Pwd_Admin);

echo $Pwd_SQL."<br>";               
//On va dire que j'obtient --- abcdefghijk
echo $Pwd_Admin."<br>";            
//là pareil --- abcdefghijk
echo $Compare."<br><br>";        
//Pourtant j'ai -1 comme résultat


Alors je me suis dit on va compter un peu


echo strlen($Pwd_Admin);               
//résultat: 11
echo "<br>";
echo strlen($Pwd_SQL);                  
//résultat: 12 !!!


Le problème est que tout ce que je test et qui vient de mysql, j'ai 1 de plus donc mes comparaisons ne fonctionnent pas.

Pourriez vous m'éclairer un peu s'il vous plaît ?
Merci


EDIT:
C'est peut être parce que strcmp est sensible à la case non ?
Si c'est le cas je ne sais pas trop quoi faire...
Je cherche, je cherche... lol

Posté : 15 août 2008, 12:13
par Sékiltoyai
Est ce que tu peux donner le schéma de ta table ?
Par ailleurs, je ne vois pas pourquoi tu utilises strcmp(), un simple == suffirait…

Posté : 15 août 2008, 12:15
par jojolapine
Sinon pourquoi ne pas faire le test directement dans ta requête?

Code : Tout sélectionner

SELECT .... WHERE mdp = MD5(entreeutilisateur)...

Posté : 15 août 2008, 12:48
par KiKoMaSo
J'ai trouvé !
Truc trop bête que j'en ai honte ! :oops:

J'avais un espace qui se baladait à la fin de mon mot de passe dans ma base :lol: :oops:


Sékiltoyai
J'utilise un strcmp car du coup avec le == j'avais un problème, donc j'avais voulu testé pourquoi cela ne fonctionné pas. Et c'est là que j'ai vu un caractère de trop.

jojolapine
Pas bête je ne pensais pas qu'on pouvait.


Merci quand même pour vos réponse aussi rapide !
Désolé du dérangement pour rien
:cry:

Posté : 15 août 2008, 14:23
par Sékiltoyai
J'avais un espace qui se baladait à la fin de mon mot de passe dans ma base :lol: :oops:
Comment tu peux avoir un espace en plus alors que tu hashes en md5, tu es sûr de bien le faire ?

Posté : 15 août 2008, 15:21
par KiKoMaSo
Oui car j'avais affiché le md5 du mot de passe dans mon navigateur que j'avais ensuite copier/coller directement dans ma base.
J'avais fait ceci pour tester ma page de connexion avec des valeurs de test.

Là, maintenant que j'ai saisie le principe je vais voir pour chercher directement les login et password dans ma base de données de mon forum phpbb.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 15 août 2008, 15:32
par Sékiltoyai
Oui, alors le champ qui stocke le mot de passe n'est pas correctement dimensionné, sinon il aurait coupé l'espace. Normalement le champ doit faire 32 caractères…
Tu peux montrer un schéma de ta table ?

Posté : 15 août 2008, 16:33
par KiKoMaSo
Tu parle d'un diagramme uml ?

Sinon en gros j'avais fais comme ça:

Table: XCM_Administration
-----Login ( clé primaire / varchar 15 / latin1_general_ci )
-----Password ( varchar 40 / latin1_general_ci )

Posté : 15 août 2008, 16:40
par Sékiltoyai
Disons pas un diagramme UML mais les requêtes de création (CREATE TABLE etc… ).
Mais ça va, tu m'as donné ce que je voulais, à savoir les types de chaque champ. En fait, tu as un varchar(40) pour le champ password, mais tu n'auras jamais autre chose que 32 caractères dans ce champ, donc tu devrais avoir un champ char(32) (en principe puisque char signifie un champ qui est de longueur fixe, alors que varchar un champ de longueur variable) mais la cuisine interne de MySQL transformera cela en varchar donc je te conseille directemenent un varchar(32) (varchar de 32 caractères), ce sera le champ le plus adapté pour ce que tu veux faire…

Posté : 15 août 2008, 20:59
par KiKoMaSo
OK
Je te remercie pour toute l'aide :)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]