Se connecter avec
S'enregistrer | Connectez-vous

New MDP par mail: problème hash MD5

Dernière réponse : dans Programmation

Bonjours, me revoila avec du lourd :D  accrochez vous:

  1. <form name="form1" method="post" action="sendpass.php">
  2. <input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
  3. <input name="Submit" value="Envoyer" type="submit" />
  4. </form>
  5.  
  6. <?php //début code php
  7.  
  8. $host="localhost"; // Host name
  9. $username="xxxxx"; // Mysql username
  10. $password="xxxxxxx"; // Mysql password
  11. $db_name="xxxxx"; // Database name
  12.  
  13.  
  14. //Connect to server and select databse.
  15. mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
  16. mysql_select_db("$db_name")or die("cannot select DB");
  17.  
  18. if (isset($_POST['Envoyer'])){
  19.  
  20. $email_to=$_POST['email_to'];
  21.  
  22. function mdpAleatoire($longueur=5)
  23. {
  24. $mdp = '';
  25. // liste des caractères pour créer le mot de passe
  26. $caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
  27. // longueur de la chaine
  28. $nombre_caractreres = strlen($caracteres);
  29. // On initialise la fonction aléatoire
  30. srand(microtime()*1000000);
  31. // On boucle sur le nombre de caractères voulus
  32. for($i = 0; $i < $longueur; $i++)
  33. {
  34. // tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
  35. $position = rand(0, $nombre_caractreres-1);
  36. // on cumule le caractère dans le mot de passe
  37. $mdp = $mdp.substr($caracteres, $position, 1);
  38. }
  39. // on renvoie le mot de passe (on peut le stocker quelque part...)
  40. return $mdp;
  41. }
  42. $newpass = mdpAleatoire();
  43. $newpasshash = md5($newpass);
  44.  
  45. $query = new MysqlQuery($conn);
  46. $qresult = $query->GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
  47.  
  48.  
  49. if($qresult < 0)
  50. {
  51. // Error
  52. header("Location: edit_information.php?e=2");
  53. exit;
  54. }
  55.  
  56.  
  57. // Store information in database
  58. $qresult = $query->SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
  59.  
  60. if($qresult == -1)
  61. {
  62. // Error occurred
  63. header("Location: edit_information.php?e=2");
  64. exit;
  65. }
  66. else
  67. {
  68. // Success, added
  69. header("Location: edit_information.php?e=P");
  70. exit;
  71. }
  72.  
  73. }
  74.  
  75. $to=$email_to;
  76.  
  77. // Your subject
  78. $subject="Your password here";
  79.  
  80. // From
  81. $header="from: your name <admin@xxxxx.net>";
  82.  
  83. // Your message
  84. $messages= "Your password for login to our website \r\n";
  85. $messages.="Your password is $newpass \r\n";
  86. $messages.="more message... \r\n";
  87.  
  88. // send email
  89. $sentmail = mail($to,$subject,$messages,$header);
  90.  
  91.  
  92. // if your email succesfully sent
  93. if($sentmail){
  94. echo "Your Password Has Been Sent To Your Email Address.";
  95. }
  96.  
  97. ?>



Bon, en faite c'est un script qui permet de générer un nouveau mdp, de l'inscrire sous forme crypté (en md5) dans la BDD et de l'envoyer par mail grace au mail du formulaire.
Bref, c'est un script de récupération de mot de passe fait par moi et grace à vous :D  (j'ai fait des petites compils de script) .

Le seul problème, c'est que je comprend pas pourquoi le mot de passe envoyé est sous forme crypté alors que j'ai bien spécifié que $newpass était la "version" non crypté qui serait envoyé.

Pourriez-vous m'aider à comprendre ?

Autres pages sur : new mdp mail probleme hash md5

Lassé par la pub ? Créez un compte

Meilleure solution

Voila (bande de flemmards :wahoo:  )


  1. <?php
  2.  
  3. $host="localhost"; // Host name
  4. $username="xxxxx"; // Mysql username
  5. $password="xxxxxx"; // Mysql password
  6. $db_name="xxxxxx"; // Database name
  7.  
  8.  
  9. //Connect to server and select databse.
  10. mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
  11. mysql_select_db("$db_name")or die("cannot select DB");
  12.  
  13. if (isset($_POST['submitted'])) { // Handle the form.
  14.  
  15. if (empty($_POST['email'])) { // Validate the email address.
  16.  
  17. $uid = FALSE;
  18.  
  19. echo "Server Error: Please reload page";
  20.  
  21. } else {
  22.  
  23. // Check for the existence of that email address.
  24.  
  25. $query = 'SELECT id FROM users WHERE user_email = \''.mysql_real_escape_string($_POST['email']).'\'';
  26. $result = mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
  27.  
  28. if (mysql_num_rows($result) == 1) {
  29.  
  30. // Retrieve the user ID.
  31.  
  32. list($uid) = mysql_fetch_array ($result, MYSQL_NUM);
  33.  
  34. } else {
  35.  
  36. echo "Server Error: Please reload page";
  37.  
  38. $uid = FALSE;
  39.  
  40. }
  41.  
  42. }
  43.  
  44. if ($uid) { // If everything’s OK.
  45.  
  46. // Create a new, random password.
  47.  
  48. $newpass = substr ( (uniqid(rand(),1)), 3, 10);
  49. $p = md5($newpass);
  50.  
  51. $query = "UPDATE users SET user_password = '{$p}' WHERE id = '{$uid}'";
  52.  
  53. $result = mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
  54.  
  55. if (mysql_affected_rows() == 1) { // If it ran OK.
  56.  
  57. // Send an email.
  58. $subject="Your password here";
  59.  
  60. // From
  61. $header="from: your name <admin@xxxxx.net>";
  62.  
  63. $messages= "Your password for login to our website \r\n";
  64. $messages.="Your password is $newpass \r\n";
  65. $messages.="more message... \r\n";
  66.  
  67. mail($_POST['email'],$subject,$messages,$header);
  68.  
  69. print ("<script language = \"JavaScript\">");
  70. print ("location.href = 'forgotok.html';"); // La redirection si tout c'est bien passé.
  71. print ("</script>");
  72.  
  73. mysql_close();
  74. exit();
  75.  
  76. } else { // If it did not run OK.
  77.  
  78. echo "<p><font color=”red” size=”+1″>Your password could not be changed due to a system error We apologize any inconvenience</font></p>";
  79.  
  80. }
  81.  
  82. } else { // Failed the validation test.
  83.  
  84. echo "<p><font color=”red” size=”+1″>Please tr again</font></p>";
  85.  
  86. }
  87.  
  88. } // End of the main Submit conditional.
  89.  
  90. ?>
  91.  
  92. <form name="form1" method="post" action="">
  93. <input onclick="this.value='';" value="Votre e-mail" name="email" id="mail_to" size="25" />
  94. <input name="submitted" value="Envoyer" type="submit" />
  95. </form>

^^ incroyable, impossible de trouver la solution. Tout semble parfait et rien ne fonctionne. J'ai posé la même question sur d'autres forums pour gagner du temps et de l'efficacité : pour l'instant tout le monde ne sait pas .


Expert Programmation

Moi y a un truc que je comprend pas, c'est comment le mail peut bien être envoyé.

Après que tu ait fait ton "UPDATE", tu a un "if truc then redirige(); exit(); else redirige(); exit');" donc le code du dessous ne peut pas s'exécuter.

Donc si cette partie de code s'exécute, alors le mail ne peut pas être envoyé.

Je ne sais pas comment ton code se débrouille, mais si nulle part tu stocke ton mot de passe en clair, alors tu ne pourra jamais le récupérer après une redirection.

T'as raison ! Il s'envoi pas ... J'y ai cru car j'avais mis dans le formulaire: "action="sendpass.php" " . Et sendpass.php c'est un script d'envoi de password :D  .

Donc normal que ça fonctionné. Mais une fois corrigé: t'avais raison: le mail ne s'envoi pas

ça donne donc ça:

  1. <form name="form1" method="post" action="">
  2. <input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
  3. <input name="Submit" value="Envoyer" type="submit" />
  4. </form>
  5.  
  6. <?php //début code php
  7.  
  8. $host="localhost"; // Host name
  9. $username="xxxxx"; // Mysql username
  10. $password="xxxxxxxxxx"; // Mysql password
  11. $db_name="xxxxxxxx"; // Database name
  12.  
  13.  
  14. //Connect to server and select databse.
  15. mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
  16. mysql_select_db("$db_name")or die("cannot select DB");
  17.  
  18. if (isset($_POST['Envoyer'])){
  19.  
  20. $email_to=$_POST['email_to'];
  21.  
  22. function mdpAleatoire($longueur=5)
  23. {
  24. $mdp = '';
  25. // liste des caractères pour créer le mot de passe
  26. $caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
  27. // longueur de la chaine
  28. $nombre_caractreres = strlen($caracteres);
  29. // On initialise la fonction aléatoire
  30. srand(microtime()*1000000);
  31. // On boucle sur le nombre de caractères voulus
  32. for($i = 0; $i < $longueur; $i++)
  33. {
  34. // tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
  35. $position = rand(0, $nombre_caractreres-1);
  36. // on cumule le caractère dans le mot de passe
  37. $mdp = $mdp.substr($caracteres, $position, 1);
  38. }
  39. // on renvoie le mot de passe (on peut le stocker quelque part...)
  40. return $mdp;
  41. }
  42. $newpass = mdpAleatoire();
  43. $newpasshash = md5($newpass);
  44.  
  45. $query = new MysqlQuery($conn);
  46. $qresult = $query->GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
  47.  
  48.  
  49. if($qresult < 0)
  50. {
  51. // Error
  52. header("Location: edit_information.php?e=2");
  53. }
  54.  
  55.  
  56. // Store information in database
  57. $qresult = $query->SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
  58.  
  59. if($qresult == -1)
  60. {
  61. // Error occurred
  62. header("Location: edit_information.php?e=2");
  63. }
  64. else
  65. {
  66.  
  67. $to=$email_to;
  68.  
  69. // Your subject
  70. $subject="Your password here";
  71.  
  72. // From
  73. $header="from: your name <admin@xxxxxxx.net>";
  74.  
  75. // Your message
  76. $messages= "Your password for login to our website \r\n";
  77. $messages.="Your password is $newpass \r\n";
  78. $messages.="more message... \r\n";
  79.  
  80. // send email
  81. $sentmail = mail($to,$subject,$messages,$header);
  82.  
  83. }
  84.  
  85. }
  86.  
  87. // if your email succesfully sent
  88. if($sentmail){
  89. echo "Your Password Has Been Sent To Your Email Address.";
  90. }
  91.  
  92. ?>

Après quelques modifs je suis arrivé à ça comme erreur

Parse error: syntax error, unexpected T_VARIABLE in /home/arbilus/public_html/newpass.php on line 73


Voici le code:

  1. <form name="form1" method="post" action="">
  2. <input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
  3. <input name="Submit" value="Envoyer" type="submit" />
  4. </form>
  5.  
  6. <?php //début code php
  7.  
  8. $host="localhost"; // Host name
  9. $username="xxxxx"; // Mysql username
  10. $password="xxxx"; // Mysql password
  11. $db_name="xxxxxxxx"; // Database name
  12.  
  13. if (isset($_POST['Submit'])){
  14.  
  15.  
  16. function mdpAleatoire($longueur=5)
  17. {
  18. $mdp = '';
  19. // liste des caractères pour créer le mot de passe
  20. $caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
  21. // longueur de la chaine
  22. $nombre_caractreres = strlen($caracteres);
  23. // On initialise la fonction aléatoire
  24. srand(microtime()*1000000);
  25. // On boucle sur le nombre de caractères voulus
  26. for($i = 0; $i < $longueur; $i++)
  27. {
  28. // tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
  29. $position = rand(0, $nombre_caractreres-1);
  30. // on cumule le caractère dans le mot de passe
  31. $mdp = $mdp.substr($caracteres, $position, 1);
  32. }
  33. // on renvoie le mot de passe (on peut le stocker quelque part...)
  34. return $mdp;
  35. }
  36. $newpass = mdpAleatoire();
  37. $newpasshash = md5($newpass);
  38.  
  39. mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
  40. mysql_select_db("$db_name")or die("cannot select DB");
  41.  
  42. $qresult = GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
  43.  
  44.  
  45. if($qresult < 0)
  46. {
  47. // Error
  48. header("Location: edit_information.php?e=2");
  49. exit;
  50. }
  51.  
  52.  
  53. // Store information in database
  54. $qresult = SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
  55.  
  56. if($qresult == -1)
  57. {
  58. // Error occurred
  59. header("Location: edit_information.php?e=2");
  60. exit;
  61. }
  62. else
  63. {
  64. // Success, added
  65. header("Location: edit_information.php?e=P");
  66. exit;
  67. }
  68.  
  69. }
  70.  
  71. mysql_close ()
  72.  
  73. $email_to=$_POST['email_to'];
  74.  
  75. $to=$email_to;
  76.  
  77. // Your subject
  78. $subject="Your password here";
  79.  
  80. // From
  81. $header="from: your name <admin@xxxxxx.net>";
  82.  
  83. // Your message
  84. $messages= "Your password for login to our website \r\n";
  85. $messages.="Your password is $newpass \r\n";
  86. $messages.="more message... \r\n";
  87.  
  88. // send email
  89. $sentmail = mail($to,$subject,$messages,$header);
  90.  
  91.  
  92. // if your email succesfully sent
  93. if($sentmail){
  94. echo "Your Password Has Been Sent To Your Email Address.";
  95. }
  96.  
  97. ?>
Expert Programmation

Merci arbilus.
Du coup, je change la meilleure réponse pour te l'attribuer encore une fois.

Sache que si ce forum est fréquenté par des cadors, des épées, des moustachus en tous genres :sol:  tous ne sont pas spécialistes de tous les domaines qu'englobe la programmation en informatique.

S'il ne fait pas de doute que Batchy se les frise, tu auras j'espère rendu service à d'autres. C'est le but recherché. Que les discutions des uns, avec problème+solution, puissent servir aux autres.

:jap: 

--------------------
PS.
Citation :
sous forme crypté (en md5)

Je suis une bille en péachpé, mais pas en sécurité. Note bien que le mot de passe n'est pas crypté, mais hashé, comme tu le précises bien dans le titre. Cette façon de faire est souvent suffisante pour un petit site personnel. A ne pas utiliser sur un site commercial, par exemple.
Lassé par la pub ? Créez un compte