Bonjour/bonsoir,
Voilà quelques heures que je m'arrache les cheveux sur une bêtise, j'espère que vous pourrez me donner un petit coup de pouce.
Voici en gros le process que j'emploi pour une page "password forgotten" :
L'utilisateur entre sur la page de pass perd ==> l'utilisateur entre son email ==> une moulinette vérifie le tout, et crée à la volée une chaîne aléatoire ==> cette chaîne est stockée au format md5 dans ma base de donnée ==> cette chaîne est envoyée en clair par mail à l'utilisateur
Le problème :
La valeur md5 ne correspond pas à la valeur envoyée en clair.
Je soupçonne très fortement que ce soit ma fonction de génération aléatoire qui fasse des siennes en arrière tâche.
Voici les codes:
La fonction de génération d'une string aléatoire
Fonction d'update du contact avec le pass généré par RandString() le tout en md5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /* Génération d'une chaîne aléatoire de 9 caractères (chiffres-majuscules-minuscules) */ function RandString() { $c = 0; while($c < 3) { $RandString .= '&#'.mt_rand(65,90); $RandString .= '&#'.mt_rand(48, 57); $RandString .= '&#'.mt_rand(97, 122); $c++; } return $RandString; }
Envoi du mail
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 /* Update d'un nouveau password généré d'un contact de la table "access_system" (pass-forgotten) */ function UpdatePassForgotten($pEmail,$pNewPass) { // Cryptage du nouveau password $passEncrypted = md5 ( $pNewPass ); //Connexion à la DB DBConnect(); // Vérification de la présence de l'email de l'utilisateur dans la table access_system $query = mysql_query("SELECT count(email_login) from access_system where email_login='$pEmail'") or die ( mysql_error() ); $result= mysql_fetch_row($query); // Si l'email est trouvé, update du contact et $operations settée à 1 if($result[0] == 1) { mysql_query("UPDATE access_system SET password='$passEncrypted' WHERE email_login='$pEmail'") or die ( mysql_error() ); $operations = 1; return $operations; } // Sinon, aucune opération effectuée, $operations settée à 0 else { $operations = 0; return $operations; } // Fermeture de la connexion à la DB DBClose(); }
Le truc, c'est que cette foutue variable "NewPass" semble changer en cours de route.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Récupération de l'email du contact à modifier $email = trim ( htmlentities ( $_POST['email'] ) ); // Appel de la fonction de génération aléatoire d'une string de 9 caractère $NewPass = RandString(); // Appel de la fonction de mise à jour du password dans la DB $FUpdatePassForgotten = UpdatePassForgotten($email,$NewPass); // Si toutes les opérations de mise à jour se sont bien passées if($FUpdatePassForgotten == 1) { ... fonction mail blablabla
Merci pour votre aide
Partager