Bonjour,
Ce matin, en voulant me connecter sur l'intranet sur lequel je travaille, je fais, par une faute de frappe et une validation un peu trop rapide, une erreur dans le mot de passe. J'ai attribué un mot de passe par défaut ('0000'), tant que le serveur n'est pas en ligne. Et cette fois j'ai écrit un '0' en trop, et là je remarque que j'arrive à me connecter Oo
Je regarde mon bout de code PHP que voici (en ajoutant quelques 'echo'):
Et là, ma page m'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 echo $data['Password'] . ' | ' . $_POST['password'] . '<br>'; /* $data['Password'] correspond au mot de passe de la bdd non-crypté $_POST['password'] correspond au mot de passe entré dans le formulaire */ if ($data['Password'] == $_POST['password']) { echo "Ca rentre !"; $_SESSION['Nom'] = $_POST['nom']; $_SESSION['Prenom'] = $_POST['prenom']; ... }
0000 | 000000000
Ca rentre !
Le test marche aussi si on met qu'un seul zéro par exemple, par contre, si on rentre au moins un autre caractère, la comparaison est correcte ('00000a' renverra bien false).
J'ai donc été obliger d'utiliser une fonction style strcmp en C. Mais ce qui m'inquiète c'est le fait que donc les comparaisons 'de base' en PHP ne fonctionnerait pas. J'aimerai donc savoir si vous voyez une erreur dans ce petit bout de code (j'ai beau voir et revoir, je vois rien qui cloche mais sait-on jamais...), si les comparaisons en PHP sont foireuses, ou s'il est recommendé d'utiliser une autre fonction pour les comparaisons ? (comme strcmp par exemple).
Merci d'avance.
Edit : Après un petit test, j'ai pu constaté que la comparaison ne fonctionnait pas correctement uniquement avec des zéros, le même test avec la lettre 'a' renvoie un résultat correct.
Partager