Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MYSQL] Resetowanie hasła linkiem
Forum PHP.pl > Forum > Przedszkole
Killerek
Witam, mam pewien problem ponieważ chcę zrobić coś takiego jak reset hasła linkiem.

Jak to na chwilę obecną wygląda?:

Użytkownik wchodzi na strone http://www.moja-strona.pl/resetujhaslo i ma tam formularz a w nim do wpisania e-mail i teraz skrypt sprawdza czy istnieje osoba o takim mailu i jeżeli istnieje to wysyła na mail podany w formularz wiadomość z kodem który został wcześniej wygenerowany i on się zapisuje wraz z mailem do bazy do tabelki kody_haslo i teraz pojawia mi się problem ponieważ nie wiem jak zrobić coś takiego:

Użytkownik wchodzi na stronę http://www.moja-strona.pl/zmienhaslo i ma nowy formularz a mianowicie musi wpisać e-mail oraz kod który został wysłany na maile w moim przypadku np. 12w31a i wpisuje te dane i jeżeli ten kod wraz z takim samym mailu znajduje się w bazie to generuje nowe haslo w md5 i zapisuje je do bazy do tabelki uzytkownicy do kolumny haslo i w echo sie wyswietla napis TWOJE NOWE HASŁO TO --tutaj haslo--. i przy okazji usuwa się ten kod z bazy i już nie będzie można go użyć. Nie wiem czy zbyt chaotycznie tego nie napisalem ale mniej wiecej chodzi mi o podobny skrypt resetowania hasla co jest np. w skrypcie MyBB.
Michael2318
do tabeli z userami:
  1. ALTER TABLE `users` ADD `hash_change_password` varchar(200) NOT NULL DEFAULT '0';


Po wypełnieniu formularza generujesz sobie losowy ciąg znaków i wysylasz go gościowi na maila + aktualizujesz w bazie przy tym userze pole `hash_change_password` na wartość ciągu, który przed chwila wygenerowales.
User wchodzi na ta twoja strone, podaje email i losowy ciag znakow. Sprawdzasz czy user o takim adresie email ma przypisany taki ciag znakow jaki user podal. Jesli tak to generujesz sobie nowy losowy ciag znakow, wyswietlasz go userowi na ekran, a w bazie aktualizujesz mu to haslo na nowo-wygenerowane (w md5) + zmieniasz `hash_change_password` na 0.
Do tego dorzuc warunek, ze jesli hash_change_password jest równe 0 to z góry zakładasz, ze podany ciag jest niepoprawny (takie zabezpieczenie, na wypadek jakby ktos podal Ci adres email i jako wygenerowany ciag znakow cyfrę 0).
Killerek
Cytat(Michael2318 @ 14.04.2013, 20:06:51 ) *
do tabeli z userami:
  1. ALTER TABLE `users` ADD `hash_change_password` varchar(200) NOT NULL DEFAULT '0';


Po wypełnieniu formularza generujesz sobie losowy ciąg znaków i wysylasz go gościowi na maila + aktualizujesz w bazie przy tym userze pole `hash_change_password` na wartość ciągu, który przed chwila wygenerowales.
User wchodzi na ta twoja strone, podaje email i losowy ciag znakow. Sprawdzasz czy user o takim adresie email ma przypisany taki ciag znakow jaki user podal. Jesli tak to generujesz sobie nowy losowy ciag znakow, wyswietlasz go userowi na ekran, a w bazie aktualizujesz mu to haslo na nowo-wygenerowane (w md5) + zmieniasz `hash_change_password` na 0.
Do tego dorzuc warunek, ze jesli hash_change_password jest równe 0 to z góry zakładasz, ze podany ciag jest niepoprawny (takie zabezpieczenie, na wypadek jakby ktos podal Ci adres email i jako wygenerowany ciag znakow cyfrę 0).


Nie bardzo to ogarne...

Możesz mi bardziej to wyjaśnić mam taki kod do przypominania i wysylania danych na maila:

  1. <?php
  2.  
  3. if (!isset($_SESSION['id'])) { // dostęp dla niezalogowanego użytkownika
  4.  
  5. include 'inc/db.php'; // połączenie się z bazą danych
  6. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  7. $tabela2 = 'kody_haslo'; // zdefiniowanie tabeli MySQL
  8.  
  9. if ($_POST['wyslane']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  10.  
  11. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES); // filtrowanie $_POST['email']
  12.  
  13. // użytkownikowi zostaje zmienione hasło, które system wygenerował
  14.  
  15. $kod = uniqid('haslo_'); // tworzenie kodu
  16.  
  17. $wynik = mysql_query("INSERT INTO $tabela2 VALUES('', '$kod', '$email')");
  18.  
  19. //-------------------------------------------------------------------------------//
  20.  
  21. $wynik = mysql_query("SELECT * FROM $tabela WHERE mail='$email'");
  22.  
  23. if (mysql_num_rows($wynik) == 1) {
  24. $informacja = mysql_fetch_array($wynik);
  25. $email = $informacja["mail"];
  26. $id = $informacja["id"];
  27. $haslo = $informacja["haslo"];
  28. $list="
  29. $email,
  30.  
  31. Aby zakończyć proces resetowania hasła w naszym serwisie, odwiedź ten adres:
  32.  
  33. <a href="http://strona.pl/zmienhaslo" target="_blank">http://strona.pl/zmienhaslo</a>
  34.  
  35. i podaj poniższe dane, potrzebne do zresetowania hasła:
  36.  
  37. Identyfikator: $id
  38. Kod aktywacji: $kod
  39.  
  40. Dziękujemy.
  41. ";
  42. mail($email, "Przypomnienie hasla", $list, "From: <noreply@strona.pl>");
  43. echo "<div class='msg success'>E-mail zawierający dalsze instrukcje został wysłany. Powinieneś go otrzymać w ciągu 5 minut (zwykle trwa to krócej).</div>";
  44. } else {
  45. echo '<div class="msg error">Nie możemy znaleźć reklamy na podstawie wpisanego adresu e-mail. Proszę sprawdź te informacje i wypełnij ponownie formularz.</div>';
  46. }
  47. mysql_close($polaczenie);
  48. }
  49.  
  50. // tworzenie formularza HTML
  51. echo <<< KONIEC
  52.  
  53. <form class="form" action="przypomnij" method="post">
  54. <input type="hidden" name="wyslane" value="TRUE" />
  55.  
  56. <p>
  57. <div class="label"><label for="email">E-mail</label></div>
  58. <input type="text" name="email" id="email" />
  59. </p>
  60.  
  61. <p class="zaloguj"><input type="submit" value="Przypomnij" /></p>
  62.  
  63. KONIEC;
  64.  
  65. } else {
  66. header('Location: /index.php'); // zalogowany użytkownik zostaje przekierowany na stronę główną
  67. }
  68.  
  69. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.