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:<?php
$nazwa_uz = $_POST['nazwa_uz'];
try
{
$haslo=ustaw_haslo($nazwa_uz);
powiadom_haslo($nazwa_uz, $haslo);
echo 'Nowe hasło zostało przesłane na adres poczty elektronicznej.<br />'; }
catch (Exception $e)
{
echo 'Hasło nie mogło zostać ustawione. Proszę spróbować póŸniej.'; }
tworz_HTML_URL('logowanie.php', 'Logowanie');
?>
Plik operujący:<?php
function pobierz_losowe_slowo($dlugosc_min, $dlugosc_max)
{
$slowo = '';
$slownik = 'english.txt'; // słownik ispell
$wp = @fopen($slownik, 'r'); if(!$wp)
return false;
$losowa_pozycja = rand(0
, $wielkosc); fseek($wp, $losowa_pozycja);
while (strlen($slowo)< $dlugosc_min || strlen($slowo)>$dlugosc_max || strstr($slowo, "'")) {
};
return $slowo;
}
function ustaw_haslo($nazwa_uz)
{
$nowe_haslo = pobierz_losowe_slowo(6, 13);
if($nowe_haslo==false)
throw new Exception('Wygenerowanie nowego hasła nie powiodło się.');
$losowa_liczba = rand(0
, 999
); $nowe_haslo .= $losowa_liczba;
$lacz = lacz_bd_r();
return false;
$wynik = $lacz->query("update autorzy
set haslo = sha1('$nowe_haslo')
where nazwa_uz = '$nazwa_uz'");
if (!$wynik)
throw new Exception('Zmiana hasła nie powiodła się.');
else
return $nowe_haslo;
}
function powiadom_haslo($nazwa_uz, $haslo)
{
$lacz = lacz_bd_r();
$wynik = $lacz->query("select email from autorzy
where nazwa_uz='$nazwa_uz'");
if (!$wynik)
{
throw new Exception('Nie znaleziono adresu e-mail');
}
else if ($wynik->num_rows==0)
{
throw new Exception('Nie znaleziono adresu e-mail');
}
else
{
$wiersz = $wynik->fetch_object();
$email = $wiersz->email;
$od = "From: admin@admin.pl r\n";
$wiad = "Hasło do systemu z portfolio dla uzytkownika $nazwa_uz zostało zmienione na $haslo r\n"
."Proszę zmienić je przy następnym logowaniu. r\n";
if (mail($email, 'Informacja o logowaniu', $wiad, $od)) return true;
else
throw new Exception('Wysłanie e-maila nie powiodło się');
}
}
?>
Ten post edytował zaaap 18.11.2008, 13:34:56