<?php
require_once('funkcje_bazy.php');
FUNCTION rejestruj($nazwa_uz, $email, $haslo)
// zarejestrowanie nowej osoby w bazie danych
// zwraca true lub komunikat o błędzie
{
// połączenie z bazą danych
$lacz = lacz_bd();
// sprawdzenie, czy nazwa użytkownika nie powtarza się
$wynik = $lacz->query("select * from uzytkownik where nazwa_uz='$nazwa_uz'");
IF (!$wynik)
throw new Exception('Wykonanie zapytania nie powiodło się.');
IF ($lacz->num_rows>0)
throw new Exception('Nazwa użytkownika zajęta — proszę wrócić i wybrać inną.');
// jeżeli wszystko w porządku, umieszczenie w bazie danych
$wynik = $lacz->query("insert into uzytkownik values
('$nazwa_uz', sha1('$haslo'), '$email')");
IF (!$wynik)
throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
RETURN true;
}
FUNCTION loguj($nazwa_uz, $haslo)
// sprawdzenie nazwy użytkownika i hasła w bazie danych
// jeżeli się zgadza, zwraca true
// jeżeli nie, wyrzuca wyjątek
{
// połączenie z bazą danych
$lacz = lacz_bd();
// sprawdzenie unikatowości nazwy użytkownika
$wynik = $lacz->query("select * from uzytkownik where nazwa_uz='$nazwa_uz' and haslo = sha1('$haslo')");
IF (!$wynik)
throw new Exception('Logowanie nie powiodło się.');
IF ($wynik->num_rows>0)
RETURN true;
else
throw new Exception('Logowanie nie powiodło się.');
}
FUNCTION sprawdz_prawid_uzyt()
// sprawdzenie czy użytkownik jest zalogowany i powiadomienie go jeżeli nie
{
IF (isset($_SESSION['prawid_uzyt']))
{
echo 'Zalogowano jako '.stripslashes($_SESSION['prawid_uzyt']).'.';
echo '<br />';
}
else
{
// nie jest zalogowany
do_html_heading('Problem:');
echo 'Brak zalogowania.<br />';
tworz_HTML_URL('logowanie.php', 'Logowanie');
tworz_stopke_html();
exit;
}
}
FUNCTION zmien_haslo($nazwa_uz, $stare_haslo, $nowe_haslo)
// zmiana hasła użytkownika ze stare_haslo na nowe_haslo
// zwraca true lub false
{
// jeżeli stare hasło jest prawidłowe zmiana nowe_haslo i zwrócenie true
// w przeciwnym wypadku wyrzucenie wyjątku
loguj($nazwa_uz, $stare_haslo);
$lacz = lacz_bd();
$wynik = $lacz->query("update uzytkownik
set haslo = sha1('$nowe_haslo')
where nazwa_uz = '$nazwa_uz'");
IF (!$wynik)
throw new Exception('Zmiana hasła nie powiodła się.');
else
RETURN true; // zmiana udana
}
FUNCTION pobierz_losowe_slowo($dlugosc_min, $dlugosc_max)
//pobranie losowego słowa ze słownika o określonej długości zwrócenie go
{
// generowanie losowego słowa
$slowo = '';
// tę ścieżkę należy dostosować do ustawień własnego systemu
$slownik = '/usr/dict/words'; // słownik ispell
$wp = @fopen($slownik, 'r');
IF(!$wp)
RETURN false;
$wielkosc = filesize($slownik);
// przejście do losowej pozycji w słowniku
srand ((double) microtime() * 1000000);
$losowa_pozycja = rand(0, $wielkosc);
fseek($wp, $losowa_pozycja);
// pobranie ze słownika następnego pełnego słowa o właściwej długości
while (strlen($slowo)< $dlugosc_min || strlen($slowo)>$dlugosc_max || strstr($slowo, "'"))
{
IF (feof($wp))
fseek($wp, 0); // jeżeli koniec pliku, przeskocz na początek
$slowo = fgets($wp, 80); // przeskoczenie pierwszego słowa bo może BYć niepełne
$slowo = fgets($wp, 80); // potencjalne hasło
};
$slowo=trim($slowo); // obcięcie początkowego \n z funkcji fgets
RETURN $slowo;
}
FUNCTION ustaw_haslo($nazwa_uz)
// ustawienie hasła użytkownika na losową wartość
// zwraca nowe hasło lub false w przypadku niepowodzenia
{
// pobranie losowego słowa ze słownika o długości pomiędzy 6 i 13 znaków
$nowe_haslo = pobierz_losowe_slowo(6, 13);
IF($nowe_haslo==false)
throw new Exception('Wygenerowanie nowego hasła nie powiodło się.');
// dodanie liczby pomiędzy 0 i 999 w celu stworzenia lepszego hasła
srand ((double) microtime() * 1000000);
$losowa_liczba = rand(0, 999);
$nowe_haslo .= $losowa_liczba;
// ustawienie nowego hasła w bazie danych lub zwrócenie false
$lacz = lacz_bd();
RETURN false;
$wynik = $lacz->query("update uzytkownik
set haslo = sha1('$nowe_haslo')
where nazwa_uz = '$nazwa_uz'");
IF (!$wynik)
throw new Exception('Zmiana hasła nie powiodła się.'); // hasło nie zmienione
else
RETURN $nowe_haslo; // hasło zmienione pomyślnie
}
FUNCTION powiadom_haslo($nazwa_uz, $haslo)
// powiadomienie użytkownika o zmianie hasła
{
$lacz = lacz_bd();
$wynik = $lacz->query("select email from uzytkownik 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'); // nazwy użytkownika nie ma w bazie danych
}
else
{
$wiersz = $wynik->fetch_object();
$email = $wiersz->email;
$od = "From: obsluga@zakladkaphp \r\n";
$wiad = "Hasło systemu ZakładkaPHP zostało zmienione na $haslo \r\n"
."Proszę zmienić je przy następnym logowaniu. \r\n";
IF (mail($email, 'Informacja o logowaniu ZakładkaPHP', $wiad, $od))
RETURN true;
else
throw new Exception('Wysłanie e-maila nie powiodło się');
}
}
?>