Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System uwierzytelniania-wysyłanie zapomnianego hasła
Forum PHP.pl > Forum > Gotowe rozwiązania
vbgregor
Witam! Problem mam taki- po próbie wygenerowania nowego hasła mam komunikat że hasło zostało pomyślnie zmienione i wysłane na adres email ale niestety tak się nie dzieje. Mail dochodzi ale bez nowego hasła. Konkretnie skrypt ma działać tak, że pobiera sobie losowo słowo z pliku txt z listą słów (każde w osobnym wierszu) następnie losowo pobiera liczbę i dodaje do słowa, podmienia to hasło w bazie danych i wysłyła na adres mail.
Będę wdzięczny jak ktoś mnie oświeci co robię nie tak z góry dziękuję poniże podstawowe skrypty tego systemu:

  1. <?php
  2. function pobierz_losowe_slowo($dlugosc_min, $dlugosc_max)
  3. {
  4. $slowo = '';
  5. $slownik = 'slowa.txt';
  6. $wp = @fopen($slownik, 'r');
  7. if(!$wp)
  8. return false;
  9. $wielkosc = filesize($slownik);
  10.  
  11. srand ((double) microtime() * 1000000);
  12. $losowa_pozycja = rand(0, $wielkosc);
  13. fseek($wp, $losowa_pozycja);
  14.  
  15. while (strlen($slowo)< $dlugosc_min || strlen($slowo)>$dlugosc_max || strstr($slowo, "'"))
  16. {
  17. if (feof($wp))
  18. fseek($wp, 0);
  19. $slowo = fgets($wp, 80);
  20. $slowo = fgets($wp, 80);
  21. };
  22. $slowo=trim($slowo);
  23. return $slowo;
  24. }
  25. ?>


  1. <?php
  2. function ustaw_haslo($nazwa_uz)
  3. {
  4. $nowe_haslo = pobierz_losowe_slowo(6, 13);
  5. if($nowe_haslo==false)
  6. throw new Exception('Wygenerowanie nowego hasła nie powiodło się.');
  7. $lacz = lacz_bd();
  8. return false;
  9. $wynik = $lacz->query("update uzytkownik
  10. set haslo = sha1('$nowe_haslo')
  11. where nazwa_uz = '$nazwa_uz'");
  12. if (!$wynik)
  13. throw new Exception('Zmiana hasła nie powiodła się.');
  14. else
  15. return $nowe_haslo;
  16. }
  17. ?>



  1. <?php
  2. function powiadom_haslo($nazwa_uz, $haslo)
  3. // powiadomienie użytkownika o zmianie hasła
  4. {
  5. $lacz = lacz_bd();
  6. $wynik = $lacz->query("select email from uzytkownik
  7. where nazwa_uz='$nazwa_uz'");
  8. if (!$wynik)
  9. {
  10. throw new Exception('Nie znaleziono adresu e-mail');
  11. }
  12. else if ($wynik->num_rows==0)
  13. {
  14. throw new Exception('Nie znaleziono adresu e-mail');
  15. }
  16. else
  17. {
  18. $wiersz = $wynik->fetch_object();
  19. $email = $wiersz->email;
  20. $od = "From:kowalski@wp.plr\n";
  21. $wiad = "Hasło systemu zostało zmienione na $haslo r\n"
  22. ."Proszę zmienić je przy następnym logowaniu. r\n";
  23. if (mail($email, 'Informacja o logowaniu', $wiad, $od))
  24. return true;
  25. else
  26. throw new Exception('Wysłanie e-maila nie powiodło się');
  27. }
  28. }
  29. ?>
kajzur
Może daj błędy jakie dostajesz smile.gif O ile jakieś są smile.gif

PS. Weź ten kod w tagi [ php ] [ /php ]
vbgregor
Niestety żadnych błędów nie dostaję
berettakk
A jak i gdzie wywołujesz funkcję powiadom_hasło()?
Spróbuj w niej na początku dać echo "$haslo" to zobaczysz, czy ta funkcja widzi hasło, które ma wysłać.

Z tego kodu wynika, że należy wywoływać te funkcje np. tak:

  1. <?php
  2. $user = 'uzytkownik_1';
  3. $nowe_haslo = ustaw_haslo($user);
  4. $powiadom_haslo = ($user, $nowe_haslo);
  5. ?>
vbgregor
Więc tak, z formularza gdzie podaję nazwę użytkownika wywołuję następujący skrypt o nazwie zapomnij_haslo.php gdzie korzystam właśnie z tej funkcji. Wstawiałem echo tak jak proponowałeś i bez efektów wniosek chyba taki że ta funkcja nie widzi tego hasła.
  1. <?php
  2.  require_once('wszystkie_funkcje.php');
  3.  $nazwa_uz = $_POST['nazwa_uz'];
  4.  
  5.  try
  6.  {
  7.     $haslo=ustaw_haslo($nazwa_uz);
  8.     powiadom_haslo($nazwa_uz, $haslo);
  9. require('top.php');
  10.     echo 'Nowe hasło zostało przesłane na adres poczty elektronicznej.
  11. ';
  12. require('bottom.php');
  13.  }
  14.  catch (Exception $e)
  15.  {
  16. require('top.php');
  17.     echo 'Hasło nie mogło zostać ustawione. Proszę spróbować póŸniej.';
  18. require('bottom.php');
  19.  }
  20. ?>


Nie mogę doczekać się niestety konkretnej pomocy więc tak sobie myślę, że może problem tkwi w uprawnieniach usera bazy danych? Korzystam z darmowego serwera i nie widzę żeby na tym PHPMyadminie można było ustawiać uprawnienia typu:insert, update, delete. Jak korzystam z polecenia grant przy tworzeniu tabeli to dostaję komunikat że brak dostępu dla usera, bez tego polecenia tabela tworzy się poprawnie. Insert działa poprawnie bo jednak mogę się rejestrować ale już z tą zmianą hasła jest problem. Może mi ktoś pomóc?
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-2024 Invision Power Services, Inc.