Tablica $_GET
Elementy tablicy $_GET pochodzą z nagłówka HTTP GET przekazanego do skryptu. Przykładowo, jeżeli kontrolka tekstowa, w formularzu HTML nosi nazwę username to w tablicy, wartość z tej kontrolki zostanie zapisana do elementu $_GET['username']. Napiszmy przykładowy skrypt, który umożliwia wpisanie w formularzu nazwy użytkownika oraz hasła. Jeżeli użytkownik poda prawidłowe informacje ? dostęp do dalszej części skryptu zostanie odblokowany. Kod źródłowy takiego skryptu znajduje się na listingu ponizej:
<html> <head> <title>Logowanie</title> </head> <body> <? if ( $_GET['username'] ) { if ( $_GET['username'] == 'root' && $_GET['password'] == 'root' ) { echo 'Weryfikacja przeprowadzona - dostęp odblokowany!<br>'; } else { echo 'Brak dostępu!<br>'; } exit; } else { ?> <form action="p4.2.php" method="GET"> <table border="1"> <tr><td width="100%" colspan="2" align="center">Logowanie</td></tr> <tr> <td width="30%">Nawa użytkownika</td> <td width="70%"><input type="text" name="username"></td> </tr> <tr> <td width="30%">Hasło</td> <td width="70%"><input type="password" name="password"></td> </tr> <tr> <td width="30%"> </td> <td width="70%"><input type="submit" value="Zaloguj"></td> </tr> </table> </form> <? } ?> </body> </html>
Pierwsza instrukcja (instrukcja warunkowa) sprawdza czy w tablicy $_GET istnieje element username. Jeżeli tak, wykonywany jest blok instrukcji mający na celu sprawdzenie czy hasło oraz nazwa użytkownika jest poprawna. Jeżeli tak ? wyświetlamy odpowiedni napis. Instrukcja exit zawarta w tym programie kończy działanie skryptu ? dalsze polecenia nie będą wykonywane.
Jeżeli tablica $_GET nie zawiera elementu username wyświetlany jest kod HTML z formularzem służącym do wprowadzenia nazwy użytkownika oraz hasła. Zwróć uwagę na następującą linię kodu HTML:
<form action="p4.2.php" method="GET">
Znacznik<form> ma na celu utworzenie formularza. Parametr action określa ścieżkę programu, do którego skierowane zostanie żądanie. Parametr method określa metodę żądania ? w tym wypadku ? HTTP GET. Dzięki temu parametry z formularza zostaną przekazane w adresie:
http://127.0.0.1/php/p4.2.php?username=root&password=root
Tablica $_GET została dodana w PHP 4.1.0. ? we wcześniejszych wersjach należało używać $HTTP_GET_VARS.
Tablica $_POST
Działanie tablicy $_POST jest praktycznie takie same jak działanie tablicy $_GET. Różnica polega na tym, że elementy w tablicy $_POST pochodzą z wywołania HTTP POST.
Zmodyfikuj program z listingu tak aby żądanie było przekazywane w nagłówku HTTP POST. Pierwsze, co musisz zrobić, to doprowadzić znacznik <form> do takiej postaci:
<form action="p4.3.php" method="POST">
Drugim etapem będzie zastąpienie tablicy $_GET przez tablicę $_POST
<html> <head> <title>Logowanie</title> </head> <body> <? if ( $_POST['username'] ) { if ( $_POST['username'] == 'root' && $_POST['password'] == 'root' ) { echo 'Weryfikacja przeprowadzona - dostęp odblokowany!<br>'; } else { echo 'Brak dostępu!<br>'; } exit; } else { ?> <form action="p4.3.php" method="POST"> <table border="1"> <tr><td width="100%" colspan="2" align="center">Logowanie</td></tr> <tr> <td width="30%">Nawa użytkownika</td> <td width="70%"><input type="text" name="username"></td> </tr> <tr> <td width="30%">Hasło</td> <td width="70%"><input type="password" name="password"></td> </tr> <tr> <td width="30%"> </td> <td width="70%"><input type="submit" value="Zaloguj"></td> </tr> </table> </form> <? } ?> </body> </html>
Tablica $_POST, podobnie jak pozostałe tablice globalne zostały dodane, do PHP 4.1.0. Wcześniej korzystano z $HTTP_POST_VARS.
Tablica $_FILES
Tablica $_FILES przechowuje informacje pochodzące z kontrolki HTML ? file, która umożliwia wysyłanie plików do serwera. My możemy obsłużyć takie wywołanie i umieścić odebrany plik na serwerze w wybranym przez nas katalogu. Teraz zajmijmy się jedynie wyświetlaniem informacji o pliku. Takie informacje zawarte są w tablicy wielowymiarowej - $_FILES. Listing ponizej zawiera kod źródłowy skryptu, który wyświetla informacje na temat pliku wysyłanego na serwer.
<html> <head> <title>Wysyłanie plików na serwer</title> </head> <body> <form action="p4.4.php" method="POST" enctype="multipart/form-data"> <input type="file" name="userfile"><br> <input type="submit" value="Wyślij"> </form> <? if ( $_FILES['userfile'] ) { echo '<blockquote>'; echo 'Nazwa pliku: <b>' . $_FILES['userfile']['name'] . '</b><br>'; echo 'Typ MIME: <b>' . $_FILES['userfile']['type'] . '</b><br>'; echo 'Nazwa tymczasowa: <b>' . $_FILES['userfile']['tmp_name'] . '</b><br>'; echo 'Rozmiar: <b>' . $_FILES['userfile']['size'] . '</b><br>'; echo 'Błąd: <b>' . $_FILES['userfile']['error'] . '</b><br>'; echo '</blockquote>'; } ?> </body> </html>
Zawartość pliku przesyłana jest do serwera przy pomocy metody HTTP POST. Poniższy znacznik HTML umożliwia wyświetlenie pola edycyjnego zawierającego przycisk Przeglądaj, służący do wybrania pliku:
<input type="file" name="userfile">
Informacje o wysyłanym pliku zawarte będą w tablicy $_FILES['userfile'].
Tablica $_FILES['userfile'] zawiera zagnieżdżoną tablicę, która zawiera informacje o pliku. Znaczenie poszczególnych kluczy prezentuje tabela ponizej:
Znaczenie kluczy tablicy $_FILES['userfile']
Klucz Opis $_FILES['userfile']['name'] Oryginalna nazwa wysyłanego pliku. $_FILES['userfile']['type'] Typ MIME wysyłanego pliku. $_FILES['userfile']['size'] Rozmiar wysyłanego pliku (w bajtach) $_FILES['userfile']['tmp_name'] Tymczasowa nazwa pliku, który został wysłany na serwer. $_FILES['userfile']['error'] Numer błędu (0 oznacza prawidłowe wysłanie).
Każdy dokument przetwarzany przez przeglądarkę (grafika, skrypty) posiada tzw. typ MIME (ang. Multipuropse Internet Mail Extensions) opisujący rodzaj dokumentu. Typ MIME przesyłany jest w nagłówku HTTP i może przybrać np. taką postać: text/html.
Wartość elementu $_FILES['userfile']['error'] może przybrać wartości takie jak w tabeli ponizej:
Stała Wartość liczbowa Opis UPLOAD_ERR_OK 0 Żadnych błędów, wysyłanie powiodło się. UPLOAD_ERR_INI_SIZE 1 Rozmiar pliku przekracza wartość z dyrektywy upload_max_filesize z pliku php.ini. UPLOAD_ERR_FORM_SIZE 2 Rozmiar pliku przekracza wartość określaną w formularzu HTML poprzez parametr MAX_FILE_SIZE. UPLOAD_ERR_PARTIAL 3 Plik został przesłany jedynie w części. UPLOAD_ERR_NO_FILE 4 Plik nie został wysłany.
W tabeli wspomniałem o parametrze MAX_FILE_SIZE. Parametr ten może zostać użyty w formularzu HTML do dodatkowego określenia maksymalnego rozmiaru pliku:
<input type="hidden" name="MAX_FILE_SIZE" value="5000">
Maksymalny rozmiar podawany jest w bajtach.
Pamiętaj o tym, że aby wysyłanie działało prawidłowo, w formularzu, w parametrze znacznika <form> należy określić typ danych:
enctype="multipart/form-data"
Tablica $_COOKIE
Tablica $_COOKIE służy do przechowywania tzw. ciastek (ang. cookies). Ciastko to dane zapisane na dysku użytkownika odwiedzającego stronę. Przeglądarka otrzymując żądanie od serwera zapisuje ciastko na dysku (jeżeli przeglądarka ma włączoną odpowiednią opcję) i dzięki temu przy kolejnym wejściu na stronę, my jesteśmy w stanie zweryfikować dane zapisane na dysku użytkownika.