Rozdział 16. ♦ Zarządzanie kontami użytkowników 431
Zapytanie jest wysyłane do serwera MySQL za pomocą funkcji mysql_query, a jego wynik pobierany przy użyciu funkcji mysql_fetch_row. W przypadku gdy w tabeli Users nie ma użytkownika spełniającego warunki zapytania, mysq1_fetch_row zwróci wartość false. Jeśli jednak użytkownik został odnaleziony, wynikiem działania mysql_fetch_row będzie tablica, w której w komórce o indeksie 0 znajdzie się identyfikator odnalezionego użytkownika. W tym miejscu upewniamy się też (ze względów bezpieczeństwa), że zapytanie zwróciło w wyniku jeden i tylko jeden wiersz (wywołanie funkcji mysql_ num_rows).
Odczytany identyfikator jest zapisywany w zmiennej, która jest wykorzystywana do stwierdzenia, jakie przywileje ma dany użytkownik. W tym celu jest wykonywane zapytanie w postaci:
SELECT Przywilejld FROM Uzytkownicy_Przywileje WHERE Userld=$userld
Wynikiem wykonania tego zapytania będzie tablica zawierająca wszystkie przywileje dane użytkownikowi o identyfikatorze userld. Przywileje te będziemy musieli uwzględniać we wszystkich skryptach składowych naszej witryny. Dlatego też jest tworzona zmienna sesji o nazwie Przywileje i jest jej przypisywana pusta tablica:
$_SESSION['Przywileje’] - arrayO:
Kluczami w tej tablicy będą nazwy przywilejów, dzięki czemu łatwo stwierdzić, które z nich dotyczą danego użytkownika. W pętli whi 1 e są więc odczytywane wyniki zapytania. Przywileje rozpoznawane są na podstawie ich identyfikatorów w instrukcji switch. W naszym przypadku jest tylko jeden przywilej — Administrator — zatem po stwierdzeniu, że w tablicy row znajduje się komórka zawierająca wartość 1, w tablicy Przywi 1 eje jest tworzony klucz Administrator i jest mu przypisywana wartość true: $_SESSION['Przywileje']['Administrator'] = true:
Na końcu kodu połączenie z serwerem MySQL jest zamykane za pomocą instrukcji mysql_close i funkcja kończy działanie zwracając wartość 0, oznaczającą, że logowanie zakończyło się sukcesem.
Niezbędne zmiany należy również wprowadzić do pliku main.php, w którym znajdzie się główna część serwisu. Jego treść została zaprezentowana na listingu 16.2. Zmiany w stosunku do wersji z rozdziału 14. znajdują się na końcu kodu. Została tam wprowadzona tabela HTML, w której komórkach wpisane zostały odnośniki do skryptu logout.php, pozwalającego na wylogowanie, oraz skryptu user adm.php realizującego funkcje administracyjne. Oczywiście odnośnik do skryptu user-adm.php jest wyświetlany jedynie wtedy, gdy załogowany użytkownik ma uprawniania administracyjne. Sprawdzane jest zatem, czy w tablicy Przywi 1 eje znajduje się klucz Admi ni strator. Jeśli tak, odnośnik jest wyświetlany; jeśli nie, odnośnik nie pojawi się na witrynie.
Listing 16.2. Kod skryptu main.php <?php
session_start():
i f(!i sSet($_SESSI0N['załogowany'])){
$_SESSI0N['komunikat'] - "Nie jesteś załogowany!":
incłudeOform.php');
exit():