Aplikacje internetowe - laboratorium PHP Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej opartej o język PHP. Aplikacja ilustruje takie mechanizmy jak: obsługa formularzy oraz obsługa zmiennych sesyjnych. Ćwiczenia można wykonać na dowolnym serwerze, na którym zainstalowano serwer HTTP (np. Apache) z obsługą PHP. Skrypty PHP należy zapisać w odpowiednik katalogu na serwerze jako pliki z rozszerzeniem.php. Do edycji plików należy wykorzystać dowolny edytor tekstowy (np. vim). Ćwiczenie 1 Zapoznanie się z konfiguracją serwera HTTP i interpretatora skryptów PHP. 1. W katalogu umożliwiającym umieszczanie interpretowanych przez serwer skryptów PHP (zazwyczaj jest to ten sam katalog w którym umieszcza się dokumenty HTML, czyli dla serwera Apache skonfigurowanego tak, aby udostępniał pliki z katalogów domowych użytkowników jest to podkatalog public_html katalogu domowego użytkownika) utwórz podkatalog php1, a w nim plik o nazwie cw_1.php. W pliku tym umieść poniższy kod, a następnie uruchom przeglądarkę i wywołaj w niej stronę generowaną przez ten kod (adres będzie miał postać: http://server.domain/~user/php1/cw_1.php). Przeanalizuj wyniki działania skryptu. Zwróć szczególną uwagę na listę zmiennych środowiskowych udostępnianych przez serwer skryptowi PHP (sekcja Apache Environment) i listę nagłówków HTTP zawartych w żądaniu i odpowiedzi (HTTP Headers Information). phpinfo();
Ćwiczenie 2 W tym ćwiczeniu zostanie utworzony skrypt wyświetlający w przeglądarce tekst powitalny i formularz logowania do serwisu. 1. Stwórz plik cw_2.html i umieść w nim poniższy kod (na razie zatwierdzenie formularza będzie powodowało wywołanie poprzedniego skryptu cw_1.php). <head><title>php - cwiczenie 2</title></head> Witaj!<p> <form name="login_form" action="cw_1.php" method="get"> <p> nazwa:<input type="text" name="nazwa" maxlength="20" size="20"/> </p> <p> haslo: <input type="password" name="haslo" maxlength="20" size="20"/> </p> <p> <input type="submit" name="zaloguj" value="zaloguj"/> </p> </form> </body> </html> 2. Uruchom przeglądarkę, wywołaj stronę z formularzem, a następnie wypełnij formularz danymi i naciśnij przycisk zaloguj. Przeanalizuj informację o zmiennych PHP dostępnych w wywołanym skrypcie (sekcja PHP Variables). W jakich zmiennych zastały umieszczone przesłane dane? 3. Zmodyfikuj kod formularza w taki sposób, aby teraz do przesyłania danych na serwer wykorzystywał metodę POST. Jak zmienił się zestaw zmiennych?
4. Zmodyfikuj kod formularza w taki sposób, aby wysyłał dane do skryptu cw_2.php 5. Utwórz plik cw_2.php i umieść w nim poniższy kod: <head> <title>php - cwiczenie 2</title> </head> Witaj<p> Otrzymano nastepujace dane:<br> echo "Nazwa: <b>". $_POST["nazwa"]."</b> <br>"; echo "Haslo: <b>". $_POST["haslo"]."</b> <br>"; </body> </html>
Ćwiczenie 3 Zapamiętanie informacji w zasięgu sesji. 1. Uzupełnij skrypt z ćwiczenia 2 o sprawdzenie, czy hasło i nazwa użytkownika są sobie równe. Jeżeli tak jest, ustaw zmienną sesyjną $czy_zalogowany na wartość TAK, wyświetl informacje o poprawnym zalogowaniu oraz link pozwalający na skorzystanie z dalszej części serwisu. Jeżeli przekazane dane różnią się między sobą, to wyświetl informacje o niepoprawnym logowaniu oraz link pozwalający na podjęcie kolejnej próby. session_start(); <head><title>php - cwiczenie 2</title></head> Witaj<p> Otrzymano nastepujace dane:<br> echo "Nazwa: <b>". $_POST["nazwa"]."</b> <br>"; echo "Haslo: <b>". $_POST["haslo"]."</b> <br>"; if (isset($_post["nazwa"]) && ($_POST["haslo"]<>'') && ($_POST["nazwa"]==$_POST["haslo"])) { echo 'Logowanie poprawne <br>'; echo '<a href="cw_4.php">dalej</a> <br>'; $_SESSION['zalogowany'] = "TAK"; $_SESSION['zalogowany_uzytkownik'] = $_POST["nazwa"]; } else { echo 'Logowanie niepoprawne<br>'; echo '<a href="cw_2.html">sprobuj jeszcze raz</a> <br>'; unset($_session['zalogowany']); unset($_session['zalogowany_uzytkownik']); } </body> </html>
Ćwiczenie 4 Do samodzielnego wykonania. Utwórz skrypt cw_4.php o następującej funkcjonalności: 1. Skrypt sprawdza, czy użytkownik jest zalogowany ustawiona wartość zmiennej sesyjnej: zalogowany. 2. Zalogowanemu użytkownikowi wyświetlamy spersonalizowane powitanie: Witaj nazwa_użytkownika oraz formularz będący czterodziałaniowym kalkulatorem (dwa pola do wprowadzania liczb i lista pozwalająca wybrać działanie). Akcją dla tego formularza jest ten sam skrypt (wykorzystaj zmienną $_SERVER["PHP_SELF"]). Przed wyświetleniem formularza sprawdź jeszcze (testując obecność parametrów wywołania), czy wywołanie strony nie jest przypadkiem efektem wypełnienia formularza. Wtedy po powitaniu wyświetl wynik działania a dopiero po nim formularz.
Ćwiczenie 5 Obsługa sesji: wykrywanie prób dostępu do serwisu bez uprzedniego zalogowania się oraz kończenie sesji. 1. Na początku skryptu cw_4.php (przed wysłaniem jakiejkolwiek zawartości HTML do przeglądarki!) umieść poniższy kod przekierowujący przeglądarkę do strony logowania jeśli użytkownik nie jest zalogowany: session_start(); if (!isset($_session['zalogowany'])) { $host = $_SERVER['HTTP_HOST']; $path = dirname($_server['php_self']); header("location: http://$host$path/cw_2.html"); exit; } 2. Przetestuj działanie aplikacji w przypadku niepoprawnego logowania. 3. Utwórz skrypt cw_5.php usuwający ustawione zmienne sesyjne i kończący sesję. session_start(); unset($_session['zalogowany']); unset($_session['zalogowany_uzytkownik']); session_destroy(); <head> <title>php - cwiczenie 5</title> </head> Wylogowano z serwisu.<br> <a href="cw_2.html">zaloguj ponownie</a> <br> </body></html> 4. W skrypcie cw_4.php dodaj wyświetlanie linku do skryptu cw_5.php umożliwiającego wylogowanie z aplikacji.