Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Losowe generowania hasła (2 etapy) + MySQL
zaaap
post
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 13.11.2008

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


Witam,
Chce na mojej stronie umiescic mozliwosc "Zapomnialem haslo". Po kliknieciu i podaniu nazwy uzytkownika na podany wczesniej adres email przychodzi losowo wygenerowane hasło, ktore nalezy uzyc do zalogowania sie. System uzywa bazy danych. Hasło generowane jest 2 etapach: 1) Wybranie losowe słowa ze słownika, 2) Generowanie ciagu liczb, które zostana "dolepione" do pobranego slowa.
Problem: System widzi słownik, pytanie czy jest on dobry, ale probowalem na dwoch roznych i jest to samo. System wysyla email, poprawnie informujac o nazwie uzytkownika lecz zmienna $haslo jest pusta. Takze wpis w bazie danych pozostaje niezmieniony. Nie wyskakuje zaden blad (jesli usune slownik calkowicie to blad sie ukazuje, wiec slownik 'widzi' jak mniemam).
Kody:

Pik wywołujacy:
  1. <?php
  2. $nazwa_uz = $_POST['nazwa_uz'];
  3.  
  4.  try
  5.  {
  6.     $haslo=ustaw_haslo($nazwa_uz);
  7.     powiadom_haslo($nazwa_uz, $haslo);
  8.     echo 'Nowe hasło zostało przesłane na adres poczty elektronicznej.<br />';
  9.  }
  10.  catch (Exception $e)
  11.  {
  12.     echo 'Hasło nie mogło zostać ustawione. Proszę spróbować póŸniej.';
  13.  }
  14.  tworz_HTML_URL('logowanie.php', 'Logowanie');
  15. ?>


Plik operujący:
  1. <?php
  2. function pobierz_losowe_slowo($dlugosc_min, $dlugosc_max)
  3.  
  4. {
  5.  
  6.  $slowo = '';
  7.  
  8.  $slownik = 'english.txt';  // słownik ispell
  9.  $wp = @fopen($slownik, 'r');
  10.  if(!$wp)
  11.    return false;
  12.  $wielkosc = filesize($slownik);
  13.  
  14.  
  15.  srand ((double) microtime() * 1000000);
  16.  $losowa_pozycja = rand(0, $wielkosc);
  17.  fseek($wp, $losowa_pozycja);
  18.  
  19.  
  20.  while (strlen($slowo)< $dlugosc_min || strlen($slowo)>$dlugosc_max || strstr($slowo, "'"))
  21.  {  
  22.     if (feof($wp))  
  23.        fseek($wp, 0);        
  24.     $slowo = fgets($wp, 80);  
  25.     $slowo = fgets($wp, 80);
  26.  };
  27.  $slowo=trim($slowo);
  28.  return $slowo;  
  29. }
  30.  
  31. function ustaw_haslo($nazwa_uz)
  32.  
  33. {
  34.  
  35.  $nowe_haslo = pobierz_losowe_slowo(6, 13);
  36.  
  37.  if($nowe_haslo==false)
  38.    throw new Exception('Wygenerowanie nowego hasła nie powiodło się.');
  39.  
  40.  srand ((double) microtime() * 1000000);
  41.  $losowa_liczba = rand(0, 999);
  42.  $nowe_haslo .= $losowa_liczba;
  43.  
  44.  
  45.  $lacz = lacz_bd_r();
  46.      return false;
  47.  $wynik = $lacz->query("update autorzy
  48.                         set haslo = sha1('$nowe_haslo')
  49.                         where nazwa_uz = '$nazwa_uz'");
  50.  if (!$wynik)
  51.    throw new Exception('Zmiana hasła nie powiodła się.');  
  52.  else
  53.    return $nowe_haslo;  
  54. }
  55.  
  56. function powiadom_haslo($nazwa_uz, $haslo)
  57.  
  58. {
  59.    $lacz = lacz_bd_r();
  60.    $wynik = $lacz->query("select email from autorzy
  61.                           where nazwa_uz='$nazwa_uz'");
  62.    if (!$wynik)
  63.    {
  64.      throw new Exception('Nie znaleziono adresu e-mail');
  65.    }
  66.    else if ($wynik->num_rows==0)
  67.    {
  68.      throw new Exception('Nie znaleziono adresu e-mail');
  69.    }
  70.    else
  71.    {
  72.      $wiersz = $wynik->fetch_object();
  73.      $email = $wiersz->email;
  74.      $od = "From: admin@admin.pl r\n";
  75.      $wiad = "Hasło do systemu z portfolio dla uzytkownika $nazwa_uz zostało zmienione na $haslo r\n"
  76.              ."Proszę zmienić je przy następnym logowaniu. r\n";
  77.      
  78.      
  79.      if (mail($email, 'Informacja o logowaniu', $wiad, $od))
  80.        return true;      
  81.      else
  82.        throw new Exception('Wysłanie e-maila nie powiodło się');
  83.    }
  84. }
  85. ?>


Ten post edytował zaaap 18.11.2008, 13:34:56
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 20.08.2025 - 04:53