Rozdział 14. ♦ Autoryzacje 381
W jego wyniku zostanie zwrócony jeden wiersz, zawierający wartość określającą liczbę wierszy spełniających warunek zadanego zapytania. Ten wiersz jest pobierany za pomocą fiinkcji mysq1_fetch_row, której wynik jest przypisany zmiennej row. Tym samym w zmiennej row znajdzie się tablica zawierająca jedną komórkę z wynikiem zapytania. Logowanie będzie poprawne tylko wtedy, gdy wynikiem zapytania była wartość 1, czyli został odnaleziony dokładnie jeden wiersz spełniający warunek zapytania. Jeśli zatem row[0] ma wartość 1, pomocniczej zmiennej result jest przypisywana wartość 0 (oznaczająca, że weryfikacja zakończyła się sukcesem). Jeśli natomiast row[0] ma wartość różną od 1, zmiennej result jest przypisywana wartość 2 (oznaczająca, że weryfikacja zakończyła się niepowodzeniem).
Na zakończenie połączenie z bazą jest zamykane za pomocą funkcji mysql_close, a wartość zmiennej result jest zwracana jako wartość działania funkcji, za pomocą instrukcji return. W kodzie funkcji zostały również umieszczone w komentarzach instrukcje echo; w' razie problemów z działaniem skryptu pozwolą one łatwo zorientować się (oczywiście po odkomentowaniu), w którym miejscu występuje problem.
Skoro już wiemy, w jaki sposób użyć bazy danych do uwierzytelniania użytkowników, możemy napisać bardziej skompilowany system autoryzacji, wykorzystujący mechanizm sesji. Będzie to odpowiednik zestawu skryptów, które utworzyliśmy w rozdziale 8., gdzie dane były przechowywane w pliku tekstowym. Napiszemy zatem cztery skrypty:
♦ login.php — wykonujący weryfikację danych wprowadzonych przez użytkownika,
♦ form.php — wyświetlający formularz logowania,
♦ main.php — zawierający główną część serwisu, dostępną jedynie dla zarejestrowanych użytkowników,
♦ logout.php — pozwalający na wylogowanie użytkownika.
Treść skryptu login.php została przedstawiona na listingu 14.3.
Listing 14.3. Treść ski-ypiu login.php
<?PHP
function checkPass($user. Spass)
/♦sprawdzenie długości przekazanych ciągów*/
SuserNameLength = strlen(Suser);
SuserPassLength - strlen(Spass);
if(SuserNameLength < 3 11 SuserNameLength > 20 11 SuserPassLength < 6 j j SuserPassLength > 40){ return 2: