Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
PHP5.
Praktyczny kurs
Autor: Marcin Lis
ISBN: 83-246-0307-7
Format: B5, stron: 432
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Wstp .............................................................................................. 7
Rozdzia 1. Podstawy ......................................................................................... 9
Lekcja 1. Czym jest PHP? ................................................................................................ 9
Jzyk skryptowy ......................................................................................................... 9
Krtka historia PHP ................................................................................................. 10
Jak to dziaa? ............................................................................................................ 10
Lekcja 2. Instalacja i konfiguracja narzdzi ................................................................... 12
Linux ........................................................................................................................ 12
Windows .................................................................................................................. 21
Plik konfiguracyjny PHP .......................................................................................... 25
PHP w wierszu polece ............................................................................................ 26
Spis treci
Rozdzia 3.
Wsppraca
z przegldark
Lekcja 10. Odbieranie danych
z przegldarki
Formularze HTML
Skrypty PHP bardzo czsto s wykorzystywane do odbierania i przetwarzania danych
pochodzcych z przegldarki uytkownika. Najczciej polega to na tym, e osoba przegldajca stron WWW wprowadza rne informacje do formularza HTML, ktre nastpnie, zazwyczaj po klikniciu przycisku, s wysyane do serwera, gdzie zajmuje si
nimi kod PHP. Aby taka procedura moga zosta wykonana, formularz musi zawiera
parametry action oraz method, zatem jego oglna posta bdzie nastpujca:
<form
name = "nazwa"
target = "okno"
action = "url"
method = "metoda"
enctype = "typ kodowania">
<!--tu definicja obiektw skadowych-->
</form>
Parametr method wskazuje metod, ktra zostanie uyta do przesania danych do serwera, moe to by GET lub POST. Natomiast action okrela adres skryptu, ktry bdzie
odbiera dane. Moe on by adresem bezwzgldnym, np. http://www.mojadomena.com/
skrypt.php, lub wzgldnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zostan dostarczone do skryptu skrypt.php znajdujcego si w gwnym katalogu serwera
o adresie http://www.mojadomena.com, natomiast w drugim do skryptu o nazwie
skrypt.php znajdujcego si w podkatalogu skrypty na serwerze ze stron WWW zawierajc formularz.
148
klasyczny przycisk,
checkbox
pole wyboru,
hidden
element ukryty,
password
radio
pole wyboru,
reset
przycisk reset,
select
lista wyboru,
submit
przycisk submit,
text
pole tekstowe,
textarea
Kady z tych elementw powinien mie okrelony parametr name, dziki ktremu bdzie
moliwa jego identyfikacja w skrypcie PHP.
Jeli wemiemy pod uwag, e adres URL ma zwykle ograniczon dugo (zaley to
od przegldarki oraz serwera), a take e moe zawiera jedynie znaki alfanumeryczne,
jasnym jest, dlaczego ta metoda jest wykorzystywana jedynie do wymiany prostych
danych tekstowych.
Aby zobaczy, jak to dziaa w praktyce, napiszmy kod prostego formularza zawierajcego jedno pole tekstowe, ktry bdzie wysya dane do skryptu o nazwie skrypt.php
umieszczonego w katalogu gwnym naszego serwera WWW. Kod HTML zawierajcy
taki formularz jest widoczny na listingu 3.1.
Listing 3.1. Kod przykadowego formularza HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Przykadowa strona</title>
</head>
<body>
<form method="GET"
action="http://127.0.0.1/skrypt.php">
<input type="text" name="pole1">
149
<input type="submit">
</form>
</body>
</html>
Formularz (widoczny na rysunku 3.1) zawiera jedno pole tekstowe o nazwie pole1 oraz
przycisk typu Submit, ktrego kliknicie powoduje przesanie danych do serwera. Warto parametru method to get, a zatem dane zostan przesane do serwera za pomoc
metody GET. Nazw skryptu oraz adres serwera wskazuje parametr action, wywoany
zostanie wic skrypt o nazwie skrypt.php znajdujcy si na serwerze o lokalnym adresie 127.0.0.1 (prawidowe byoby rwnie uycie adresu http://localhost/skrypt.php).
Poniewa zarwno kod HTML, jak i kod skryptu bd si znajdoway na tym samym
serwerze w tym samym katalogu, mona rwnie pomin w parametrze action dane
dotyczce serwera. Tym samym mgby mie on posta:
action="skrypt.php"
Rysunek 3.1.
Formularz generowany
przez kod z listingu 3.1
Jeli do pola tekstowego wprowadzimy przykadowy cig znakw, np. test, oraz klikniemy przycisk Wylij zapytanie (napis na przycisku moe by rny w zalenoci od zastosowanej przegldarki), to powstanie URL w postaci http://127.0.0.1/skrypt.php?pole1=test,
tak jak na rysunku 3.2. Przetworzony zostanie zatem skrypt znajdujcy si na serwerze lokalnym 127.0.0.1, w pliku skrypt.php i zostan mu przekazane wartoci znajdujce si za znakiem ? odnonika. W skrypcie moemy te wartoci odczyta i wykorzysta do wasnych celw. Dowiedzmy si zatem, jak to zrobi.
Rysunek 3.2.
Odnonik generowany
w metodzie GET
Tego typu odwoanie naley stosowa jedynie wtedy, gdy konieczna jest kompatybilno ze starszymi wersjami PHP (PHP3), zazwyczaj jednak nie ma takiej potrzeby. Aby
skorzysta z tego typu odwoa w PHP5, naley w pliku konfiguracyjnym php.ini wczy
domylnie wyczon opcj register_long_arrays (register_long_arrays = On).
150
Przy przetwarzaniu formularzy bardzo przydaje si funkcja isSet, ktra pozwala stwierdzi, czy dane pole formularza zostao ustawione, innymi sowy czy zostaa przekazana
do skryptu warto odpowiadajca temu polu. Aby pokaza sposb wykorzystania tej
funkcji, utwrzmy formularz skadajcy si z trzech pl wyboru typu radio. Odpowiedni
kod HTML zosta zaprezentowany na listingu 3.3, a jego wygld widoczny jest na ry1
Poczwszy od PHP w wersji 4.2.0, a wic take we wszystkich wersjach PHP5, opcja ta jest domylnie
wyczona.
151
sunku 3.3. Kade z pl ma tak sam warto parametru name, a zatem tworz one
jedn grup. Dziki temu na raz moe by zaznaczone tylko jedno pole, s to wic
opcje wykluczajce. Kade pole ma jednak inn warto parametru value, dziki czemu
w skrypcie bdziemy je mogli atwo zidentyfikowa. Parametr action formularza wskazuje, podobnie jak we wczeniejszych przykadach, na skrypt znajdujcy si w pliku
skrypt.php na serwerze lokalnym o adresie 127.0.0.1.
Listing 3.3. Formularz zawierajcy elementy typu radio
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Przykadowa strona</title>
</head>
<body>
<P>Prosz zaznaczy jedn z opcji.</P>
<form method="get"
action="http://127.0.0.1/skrypt.php">
<input type="radio" name="radio1" value="opcja1">
Opcja1
<br />
<input type="radio" name="radio1" value="opcja2">
Opcja2
<br />
<input type="radio" name="radio1" value="opcja3">
Opcja3
<br /><br />
<input type="submit">
</form>
</body>
</html>
Rysunek 3.3.
Wygld formularza
generowanego
przez kod
z listingu 3.3
Napiszmy wic teraz skrypt skrypt.php. Pozwoli nam on stwierdzi, czy zostaa zaznaczona jaka opcja i ewentualnie ktra. W wykonaniu tego zadania bardzo nam pomoe
wspomniana przed chwil funkcja isSet. Spjrzmy na kod widoczny na listingu 3.4
isSet jest tu uywana do stwierdzenia, czy w tablicy $_GET jest ustawiony klucz o nazwie
152
radio1, a tym samym czy do skryptu zostaa przekazana warto pola radio o nazwie
radio1. Jeli tak, funkcja zwraca warto true, jeli nie warto false. Takie zachowanie pozwala na uycie instrukcji warunkowej if do wywietlenia waciwego
komunikatu na ekranie.
Listing 3.4. Obsuga pl typu radio
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Wynik dziaania skryptu</title>
</head>
<body>
<p>
<?php
if(!isSet($_GET['radio1'])){
echo("Prosz zaznaczy jedn z opcji!");
}
else{
echo("Zaznaczona opcja to {$_GET['radio1']}.");
}
?>
</p>
</body>
</html>
Metoda POST
Metoda POST to drugi sposb przesyania danych do serwera. Gwne rnice dla uytkownika to moliwo przesania duo wikszej iloci danych (np. plikw binarnych)
oraz to, e nie mona ich zobaczy w polu adresu przegldarki (co wydaje si cakiem
logiczne). Maksymalna ilo danych, jakie mog by przesane za pomoc tej metody,
jest ograniczona przez znajdujc si w pliku php.ini opcj konfiguracyjn post_max_
size2. Domylnie jest to 8 MB. Prosty formularz wykorzystujcy przesyanie danych
metod POST zosta przedstawiony na listingu 3.5. Jak wida, jedyn rnic w stosunku
do metody GET (formularz z listingu 3.1) jest zmiana wartoci parametru method znacznika
form. Rwnie i w tym przypadku parametr action mgby mie posta:
action="http://localhost/skrypt.php"
lub po prostu:
action="skrypt.php"
Na maksymaln ilo odbieranych danych mog rwnie mie wpyw ustawienia serwera WWW.
153
<title>Przykadowa strona</title>
</head>
<body>
<form method="post"
action="http://127.0.0.1/skrypt.php">
<input type="text" name="pole1">
<input type="submit">
</form>
</body>
</html>
W skrypcie PHP wartoci przesane z formularza mona odczyta, podobnie jak miao
to miejsce w przypadku metody GET, na trzy sposoby. Sposobem pierwszym (obecnie
niezalecanym; niezbdne jest wczenie opcji konfiguracyjnej register_long_arrays)
jest wykorzystanie globalnej tablicy $HTTP_POST_VARS. Jako indeks tablicy naley poda
nazw pola formularza, z ktrego chcemy odczyta dane. Schematycznie taka konstrukcja ma posta:
$zmienna = $HTTP_POST_VARS['nazwa_pola'];
Naley jej uy, jeli niezbdne jest zachowanie kompatybilnoci z wersj 3 PHP.
Drugim sposobem dostpu jest wykorzystanie globalnej tablicy $_POST. Jako indeks tablicy
naley zastosowa rwnie nazw pola formularza, z ktrego chcemy odczyta dane.
Jest to polecany sposb odwoywania si do danych i bdzie on stosowany w dalszej
czci ksiki, o ile zaistnieje potrzeba zastosowania metody POST. Schematycznie konstrukcja taka ma posta:
$zmienna = $_POST['nazwa_pola'];
Sposb trzeci to dostp bezporedni, niezbdne jest w tym przypadku wczenie w pliku
konfiguracyjnym php.ini opcji register_globals. Dostp do pl formularza moe si
wtedy odbywa tak samo, jak w przypadku zwykych zmiennych. Oznacza to, e jeli
w formularzu bdzie wystpowao pole o nazwie pole1, to w skrypcie bdzie mona
si odwoa do niego tak, jak do zmiennej $pole1. Jak ju wiemy, ta metoda te nie jest
polecana, gdy nie pozwala na odrnienie zwykych zmiennych od tych powstaych
ze wzgldu na otrzymanie danych z formularza, co moe powodowa trudne do wykrycia bdy.
Na listingu 3.6 zosta przedstawiony skrypt odczytujcy warto pola tekstowego z formularza z listingu 3.5 z wykorzystaniem wszystkich trzech wymienionych sposobw.
Przykadowy efekt dziaania skryptu w przypadku, kiedy do pola tekstowego formularza zosta wprowadzony cig znakw test, zosta przedstawiony na rysunku 3.4. Jak
wida, przy prostej obsudze formularzy rnice pomidzy metodami GET i POST s niewielkie, jednak ta druga pozwoli nam wykonywa bardziej zaawansowane zadania, jak
np. przesyanie plikw do serwera, czym zajmiemy si ju w kolejnej sekcji.
Listing 3.6. Skrypt odczytujcy dane przekazane z formularza za pomoc metody POST
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
154
Rysunek 3.4.
Rne sposoby
odczytu przesanych
danych daj
taki sam efekt
enctype
155
action
method
W formularzu naley umieci dwa pola input, jedno typu file, a drugie typu submit.
Polu typu file, sucemu do wyboru pliku, nadamy nazw (parametr name) plik1. Pozwoli ona na zidentyfikowanie danych z tego pola w skrypcie PHP. Kod przykadowego
formularza zosta zaprezentowany na listingu 3.7. Gdy zostanie wczytany do przegldarki, bdzie mia natomiast posta widoczn na rysunku 3.5.
Listing 3.7. Formularz HTML sucy do wysyania plikw
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Wysyanie plikw</title>
</head>
<body>
<form name
= "formularz1"
enctype = "multipart/form-data"
action = "http://127.0.0.1/upload.php"
method = "POST">
Nazwa pliku:
<input type = "file"
name = "plik1"
size = "30"
value = "">
<input type = "submit"
name = "wyslij"
value = "Wylij plik">
</form>
</body>
</html>
Rysunek 3.5.
Wygld formularza
do wysyania plikw
156
upload_tmp_dir = /var/www/upload
a w systemie Windows:
upload_tmp_dir = c:\www\upload\
Skrypt odbierajcy dane uzyska dostp do globalnej tablicy $_FILES zawierajcej informacje niezbdne do ich dalszego przetworzenia. Jest to tablica asocjacyjna, w ktrej plik
identyfikowany jest przez nazw pola input (typu file) z formularza WWW. W przypadku formularza z listingu 3.7 ta nazwa to plik1. Pod tym indeksem znajduje si 5 innych, ktre pozwalaj na odczytanie informacji o pliku. S to:
$_FILES['plik1']['name']
$_FILES['plik1']['type']
$_FILES['plik1']['size']
zapisany na serwerze.
$_FILES['plik1']['error']
Pole error (dostpne w PHP od wersji 4.2.0) moe przyjmowa jedn z wartoci:
UPLOAD_ERR_OK
UPLOAD_ERR_INI_SIZE
UPLOAD_ERR_NO_FILE
157
Katalog, w ktrym maj by zapisywane odbierane pliki, jest wskazywany przez zmienn $uploaddir. Oczywicie musi on istnie w systemie plikw serwera. W przykadzie
zosta zastosowany cig ./, co oznacza katalog biecy (katalog, w ktrym znajduje si
skrypt upload.php). Naley rwnie pamita, e musi on mie odpowiednio ustawione
prawa dostpu (aparat wykonawczy PHP musi mie moliwo zapisu).
Pierwsz czynnoci wykonywan w skrypcie jest sprawdzenie, czy pole error tablicy
$_FILES zawiera warto UPLOAD_ERR_OK, a zatem czy plik zosta odebrany bez problemw. Jeli tak, z tablicy $_FILES jest odczytywana oryginalna nazwa pliku oraz
nazwa tymczasowa, pod ktr zosta on zapisany na serwerze. Do nazwy oryginalnej
doczana jest nazwa katalogu zawarta w zmiennej $uploaddir i cao jest zapisywana
w zmiennej $new_name. Nazwa tymczasowa jest z kolei zapisywana w zmiennej $temp_
name. Zmienne te (zostay one wprowadzone do skryptu w celu zwikszenia przejrzystoci kodu) s nastpnie wykorzystywane jako parametry funkcji move_uploaded_file.
Jeli wykonanie tej funkcji zakoczy si sukcesem i plik zostanie przeniesiony pod
158