238 PHP i MySQL dla każdego
3. W przypadku gdy zmienna załogowany nie jest ustawiona, ale ustawiona jest co najmniej jedna ze zmiennych: user lub hasl o, oznacza to, że niezalogowany użytkownik wypełnił formularz logowania; należy zatem dokonać weryfikacji danych. Weryfikacja jest wykonywana za pomocą funkcji checkPass, której działanie jest analogiczne do funkcji o tej samej nazwie ze skryptu 7.25 z rozdziału 7.
Funkcja checkPass zwraca jedną z poniższych wartości:
♦ 0 — dane uzyskane ze skryptu logowania są poprawne. W takiej sytuacji zmiennej załogowany jest przypisywana nazwa użytkownika oraz następuje przekierowanie do części głównej serwisu znajdującej się w pliku main.php. Przekierowanie dokonuje się poprzez wysłanie do przeglądarki nagłówka HTTP Location.
♦ 1 — Wystąpił błąd serwera (np. nie można było odczytać pliku z hasłami).
W takiej sytuacji zmiennej sesji o nazwie komunikat jest przypisywany ciąg znaków informujący o takiej sytuacji oraz ponownie jest wczytywany formularz logowania.
♦ 2 — Wprowadzona nazwa lub hasło użytkownika jest niepoprawne. W takim przypadku działanie jest podobne jak w poprzedniej sytuacji, tzn. zmiennej komuni kat jest przypisywany odpowiedni komunikat i jest wczytywany formularz logowania.
Na listingu 8.9 jest widoczna treść pliku form.php zawierającego formularz logowania, jego wygląd obrazuje natomiast rysunek 8.7. Składa się on z typowej konstrukcji języka HTML, ze znacznikami form i input, a dane z formularza są wysyłane do skryptu login.php. Oprócz formularza w pliku został również umieszczony krótki fragment kodu PHP. Jego zadaniem jest sprawdzenie, czy została ustawiona zmienna sesji o nazwie komunikat. Jeśli tak, do przeglądarki jest wysyłana treść komunikatu; jeśli zaś nie, do przeglądarki jest wysyłany standardowy napis z prośbą o podanie nazwy i hasła użytkownika. Teoretycznie można by pominąć procedurę sprawdzania, czy zmienna komuni kat została ustawiana, gdyż skrypt form.php zawsze jest wywoływany po jej ustawieniu. W praktyce nie możemy jednak wykluczyć sytuacji, kiedy użytkownik, nawet całkiem przypadkowo, wywoła skrypt form.php bezpośrednio z przeglądarki. Zatem i w takiej sytuacji zmienna komunikat powinna zawierać odpowiednią treść.
Listing 8.9. Treść pliku zawierającego formularz logowania
<html>
<body>
<div align='center’>
<h2>
<?php
1f(i sSet($_SESSI0N['komuni kat'])) echo $_SESSION['komunikat']: else
echo "Wprowadź nazwę i hasło użytkownika:":
</h2>
<form name ■ "formularzl"
action = "http://localhost/login.php" method = "POST"