Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> odzyskiwanie hasła na e-mail a link
inomi13
post
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

Ostrzeżenie: (0%)
-----


Stworzyłem formularz odzyskiwania hasła który wysyła na skrzynkę e-mailową nowe hasło a w bazie danych dodaje taki sam wpis w tabeli "pass_temp".
  1. $_SESSION['name'] = $wiersz['name'];
  2. $wynik= $polaczenie->query("SELECT pass from persons where email='$email'");
  3. $wiersz = $wynik->fetch_assoc();
  4. $wiersz['pass'] = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  5. $wiersz['pass'] = substr($wiersz['pass'],0,20);
  6. $haslo1=$wiersz['pass'];
  7. $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
  8. $zmiana = "UPDATE persons SET pass = '$haslo_hash', pass_temp = '$haslo_hash' WHERE email='$email'";


Osoba która otrzymuje e-maila klika w link "zmiana hasła" i może odrazu wpisać tymczasowe hasło, nowe i powtórzenie nowego hasła. Wszystko działa jednak jest problem w sytuacji jak dwie osoby w tym samym czasie chciały by odzyskać hasło. Proszę o jakieś sugestie

  1. require_once "connect.php";
  2. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  3. $wynik= $polaczenie->query("SELECT user from persons where pass=pass_temp");
  4. $wiersz = $wynik->fetch_assoc();
  5. if(empty($wiersz["user"]))
  6. {
  7. header('Location: index.php');
  8. exit();
  9. }
  10. else
  11. {
  12. if(isset($_POST['ok']))
  13. {
  14.  
  15. $wszystko_OK=true;
  16. $user=$wiersz["user"];
  17. $haslo = $_POST['haslo'];
  18. $haslo1 = $_POST['haslo1'];
  19. $haslo2 = $_POST['haslo2'];
  20.  
  21.  


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
inomi13
post
Post #2





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

Ostrzeżenie: (0%)
-----


Kod tak działa że w momencie ustawienia nowego hasła w tabeli "pass_temp" zostanie wpisana pusta wartość
  1. <?php
  2. require_once "connect.php";
  3. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  4. $wynik= $polaczenie->query("SELECT user from persons where pass=pass_temp");
  5. $wiersz = $wynik->fetch_assoc();
  6. if(empty($wiersz["user"]))
  7. {
  8. header('Location: index.php');
  9. exit();
  10. }
  11. else
  12. {
  13. if(isset($_POST['ok']))
  14. {
  15.  
  16. $wszystko_OK=true;
  17. $user=$wiersz["user"];
  18. $haslo = $_POST['haslo'];
  19. $haslo1 = $_POST['haslo1'];
  20. $haslo2 = $_POST['haslo2'];
  21.  
  22.  
  23.  
  24. if((strlen($haslo)<8) || (strlen($haslo1)<8)||(strlen($haslo)>20) || (strlen($haslo1)>20))
  25. {
  26. $wszystko_OK=false;
  27. $_SESSION['e_haslo']="Hasło musi posiadać od 8 do 20 znaków!";
  28.  
  29. }
  30. else
  31. {
  32. if($haslo1 != $haslo2)
  33. {
  34. $wszystko_OK=false;
  35. $_SESSION['e_haslo']="Nowe hasło i jego powtórzenie, nie są takie same!";
  36. }
  37. else
  38. {
  39.  
  40.  
  41. require_once "connect.php";
  42. mysqli_report(MYSQLI_REPORT_STRICT);
  43.  
  44.  
  45. {
  46. try
  47. {
  48. $polaczenie= mysqli_connect($host,$db_user,$db_password,$db_name);
  49. $wynik= $polaczenie->query("SELECT pass from persons where user='$user'");
  50. $wiersz = $wynik->fetch_assoc();
  51.  
  52. if ($polaczenie->connect_errno!=0)
  53. {
  54. throw new Exception(mysqli_connect_errno());
  55. }
  56. else
  57. {
  58.  
  59. if(password_verify($haslo, $wiersz['pass']))
  60. {
  61. $wszystko_OK=true;
  62.  
  63. $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
  64. $zmiana = "UPDATE persons SET pass = '$haslo_hash', pass_temp = '' WHERE user='$user'";
  65. if ($polaczenie->query($zmiana) === true)
  66. {
  67. $_SESSION['udanazmiana']=true;
  68. header('Location:pass_confirm_change.php');
  69. }}
  70. else
  71. {
  72. $wszystko_OK=false;
  73. $_SESSION['e_haslo']="Stare hasło jest nie poprawne";
  74. }
  75.  
  76. $polaczenie->close();
  77. }
  78. }
  79. catch(Exception $e)
  80. {
  81. echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o zmianę hasła w innym terminie!</span>';
  82. echo '<br />Informacja developerska: '.$e;
  83. }
  84. }}}}}
  85. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 08:02