C
M
Y
K
Elementy języka HTML dotyczące formularzy
Formularz w jêzyku HTML definiujemy stosuj¹c element FORM. Ele-
ment ten nale¿y do grupy elementów blokowych. Wewn¹trz, pomiê-
dzy znacznikami <FORM> oraz </FORM> umieszczamy zawartoϾ
formularza, na któr¹ sk³adaj¹ siê g³ownie elementy INPUT, BUTTON,
SELECT, OPTGROUP, OPTION, TEXTAREA, LABEL, FIELDSET
oraz LEGEND. Kontrolki te uk³adamy wewn¹trz formularza, stosuj¹c
akapity, tabele oraz sekcje DIV.
Zwróæmy uwagê na fakt, ¿e kontrolki formularza s¹ elementami
tekstowymi i nie mog¹ znajdowaæ siê bezpoœrednio w elemencie
FORM. Poprawn¹ zawartoœci¹ formularza jest co najmniej jeden ele-
ment blokowy z wykluczeniem samego formularza (formularzy nie
mo¿na zagnie¿d¿aæ). Zatem pomiêdzy znacznikami <FORM ...> oraz
</FORM> umieszczamy tabele, akapity czy sekcje, zaœ dopiero
wewn¹trz elementów blokowych w³aœciwe kontrolki formularza. Kod:
PRZYK£AD NIEPOPRAWNY
<FORM ...>
Login: <INPUT name=”login”><BR>
Has³o: <INPUT type=”password” name=”haslo”><BR>
<INPUT type=”submit” value=”Loguj”>
</FORM>
jest niepoprawny. Nale¿y go zapisaæ:
<FORM ...>
<P>
Login: <INPUT name=”login”><BR>
Has³o: <INPUT type=”password” name=”haslo”><BR>
<INPUT type=”submit” value=”Loguj”>
</P>
</FORM>
lub stosuj¹c tabelê:
<FORM ...>
<TABLE>
Najwygodniejszym sposobem rozmieszczania kontrolek formularza jest
zastosowanie tabeli.
<TR>
<TD>Login:</TD>
<TD><INPUT name=”login”><BR></TD>
</TR>
...
</TABLE>
</FORM>
Rys. 1 przedstawia dwa przyk³adowe formularze, które stosuj¹ do
roz³o¿enia kontrolek akapit oraz tabelê.
Rys. 1. Kontrolki formularza rozmieszczone wewn¹trz akapitu
oraz tabeli
Atrybuty formularza
Element FORM ma – oprócz standardowych atrybutów grupy coreattrs
(czyli m.in. id, class, title, style, lang oraz standardowych zdarzeñ)
– w³asne atrybuty charakterystyczne: action, method, enctype, accept,
name, onsubmit, onreset oraz accept-charset.
Najwa¿niejszym z nich jest obowi¹zkowy atrybut action. Ustala on
adres URL skryptu, który bêdzie wywo³any po zatwierdzeniu formula-
rza przyciskiem Wyœlij. Dane wprowadzone do formularza zostan¹
przekazane do podanego skryptu.
Drugim wa¿nym atrybutem formularza jest atrybut method. Jego
wartoœci¹ jest nazwa metody protoko³u HTTP. Dopuszczalnymi warto-
œciami s¹ GET oraz POST. Wprawdzie wartoœci¹ domyœln¹ jest GET,
jednak zaleca siê – g³ównie z powodów bezpieczeñstwa – stosowanie
metody POST.
Atrybut enctype ustala sposób zakodowania danych do³¹czonych
do zapytania. Ma on znaczenie jedynie, gdy formularz przekazujemy
metod¹ POST (w przypadku metody GET zawsze stosowane jest ko-
dowanie application/x-www-form-urlencoded). Domyœlnie wartoœci¹
tego atrybutu jest typ application/x-www-form-urlencoded. W przy-
padku przekazywania pliku na serwer, nale¿y ustaliæ wartoœæ tego
atrybutu na multipart/form-data.
Z atrybutu enctype korzystamy na dwa sposoby. Jeœli formularz
s³u¿y do przekazywania pliku na serwer, wówczas nale¿y nadaæ atry-
HTML/PHP
INTERNET.maj.2005
94
NA CD
NEWSY
Z OK£ADKI
FIRMA
MAGAZYN
PROGRAMY
WARSZTAT
Przykłady i tabele z tego artykułu znajdują się
na dołączonej płycie CD w katalogu
Warsztat_formularze.
Formularze na stronach WWW zawieraj¹ ró¿ne kontrolki s³u¿¹ce do wprowadzania danych.
Artyku³ szczegó³owo omawia wszystkie elementy jêzyka HTML dotycz¹ce formularzy
i wyjaœnia rolê oraz sposób wykorzystania poszczególnych atrybutów.
W³odzimierz Gajda
KONTROLKI
FORMULARZY
FORMULARZY
KONTROLKI
C
M
Y
K
butowi enctype wartoœæ enctype=”multipart/form-data”. W przeciw-
nym razie (czyli w przypadku zwyk³ego formularza zawieraj¹cego kil-
ka kontrolek) atrybut enctype pomijamy. Przyjmie on wówczas war-
toœæ domyœln¹.
Atrybut accept nie jest wykorzystywany. Mia³ on umo¿liwiaæ
wskazanie typów plików, jakie mog¹ byæ wys³ane formularzem na
serwer. Jednak wspó³czesne przegl¹darki ignoruj¹ jego wartoœæ.
Wreszcie zdarzenia onsubmit oraz onreset umo¿liwiaj¹ wykonanie
skryptów po zatwierdzeniu oraz zresetowaniu formularza.
Kontrolki formularza
Formularz mo¿e zawieraæ kilka rodzajów kontrolek. Nale¿¹ do nich:
wiersze wprowadzania danych, wiersze wprowadzania hase³, przyci-
ski, przyciski wyboru (ang. checkbox), wykluczaj¹ce siê przyciski wy-
boru (ang. radio buttons), listy rozwijane, listy wyboru, pola tekstowe,
pola ukryte oraz przyciski umo¿liwiaj¹ce wybór pliku. Kontrolki te
umieszczamy wewn¹trz formularza stosuj¹c elementy INPUT,
BUTTON, SELECT, OPTGROUP, OPTION i TEXTAREA. Dodatko-
wo, elementy LABEL, FIELDSET i LEGEND umo¿liwiaj¹ pogrupo-
wanie kontrolek oraz ustalenie etykiet.
Atrybuty ogólne kontrolek formularza
Wiêkszoœæ kontrolek zawartych w formularzu posiada atrybut name
(wyj¹tkami s¹ przyciski zatwierdzaj¹ce i resetuj¹ce formularz, opcje
i grupy opcji OPTION oraz OPTGROUP, jak równie¿ elementy
FIELDSET, LEGEND i LABEL). Atrybut ten ustala nazwê kontrolki,
jaka zostanie przekazana do skryptu. Jeœli wewn¹trz nastêpuj¹cej kon-
trolki INPUT:
<INPUT name=”email”>
wprowadzimy napis diabel@pieklo.com, wówczas do skryptu zostanie
przekazana zmienna:
email=diabel@pieklo.com
W jêzyku PHP powy¿sza zmienna bêdzie dostêpna w jednej
z tablic $_POST lub $_GET, np.:
$_POST[’email’] === ’diabel@pieklo.com’
Warto zwróciæ uwagê na pewne u³atwienia wystêpuj¹ce w jêzyku
PHP i dotycz¹ce przetwarzania wielu pól formularza. Jeœli wartoœæ
atrybutów name kilku kontrolek zakoñczymy nawiasami kwadrato-
wymi, np.:
<INPUT name=”kolor[]”>
wówczas dane pochodz¹ce z tych¿e kontrolek formularza zostan¹ za-
warte w tablicy $_POST[’kolor’]. W ten sposób zamiast wielu osob-
nych zmiennych otrzymamy jedn¹ tablicê zawieraj¹c¹ wiele wartoœci.
Jest to szczególnie wygodne w przypadku pól wyboru (kontrolki
INPUT typu checkbox) oraz list wielokrotnego wyboru (kontrolki
SELECT z atrybutem multiselect).
Kolejnym atrybutem, jaki stosujemy w odniesieniu do wiêkszoœci
kontrolek, jest atrybut value. W zale¿noœci od kontrolki, atrybut ten
ustala bie¿¹c¹ wartoœæ zmiennej lub etykietê kontrolki.
Równie¿ atrybuty readonly, disabled, accesskey oraz tabindex znajdu-
j¹ zastosowanie w odniesieniu do wielu kontrolek umieszczanych w for-
mularzu. Atrybuty readonly oraz disabled s¹ atrybutami logicznymi.
Atrybut readonly uniemo¿liwia modyfikacjê wartoœci kontrolki.
Kontrolka taka jest widoczna i mo¿e staæ siê aktywna (tj. mo¿emy, ko-
rzystaj¹c na przyk³ad z klawisza tabulacji, umieœciæ kursor wewn¹trz
kontrolki). Nie mo¿emy jednak zmieniaæ jej wartoœci. Po zatwierdze-
niu formularza kontrolka taka jest przesy³ana do skryptu przetwarzaj¹-
cego formularz.
Kontrolki posiadaj¹ce atrybut disabled s¹ niedostêpne. Nie mo¿e-
my zmieniaæ wartoœci takich kontrolek ani uczyniæ ich aktywnymi. Co
wiêcej, po przes³aniu formularza wartoœci kontrolek posiadaj¹cych
atrybut disabled nie s¹ przesy³ane do skryptu.
Jedynym sposobem odblokowania kontrolek readonly oraz disabled
jest odpowiednie oprogramowanie zdarzeñ formularza lub kontrolek
w jednym z jêzyków skryptowych, np. JavaScript. W przeciwnym ra-
zie kontrolki takie bêd¹ przez ca³y czas niedostêpne.
Atrybut accesskey ustala skrót klawiszowy dla danej kontrolki.
W systemie Windows skrót aktywujemy przytrzymuj¹c lewy klawisz
Alt. Jeœli na przyk³ad kontrolka INPUT posiada atrybut accesskey=”K”,
wówczas po naciœniêciu klawiszy Alt+K kursor zostanie umieszczony
wewn¹trz kontrolki. Niestety, ¿adna spoœród popularnych przegl¹darek
nie wyró¿nia skrótów klawiszowych (na przyk³ad przez podkreœlenie od-
powiedniej litery w tekœcie etykiety). Jeœli chcemy poinformowaæ u¿yt-
kownika o dostêpnych skrótach klawiszowych, to musimy wpisaæ w for-
mularzu odpowiedni tekst. Dodatkowym problemem jest fakt, ¿e przegl¹-
darki posiadaj¹ predefiniowane skróty klawiszowe, przy czym ka¿da
z nich mo¿e posiadaæ inne, specyficzne dla siebie skróty. Trudno jest
ustaliæ skróty klawiszowe, które nie s¹ zdublowane przez ¿adn¹ z popu-
larnych przegl¹darek. Zachowanie w przypadku zdublowania skrótu kla-
wiszowego mo¿e byæ ró¿ne w przypadku ró¿nych przegl¹darek.
Ostatni z atrybutów ogólnych, tabindex, umo¿liwia ustalenie kolej-
noœci w jakiej kontrolki formularza bêd¹ aktywowane klawiszem tabu-
lacji. Wartoœci¹ atrybutu jest liczba ca³kowita ustalaj¹ca pozycjê kon-
trolki na liœcie.
Zdarzenia dotyczące kontrolek
W odniesieniu do kontrolek formularza mo¿emy oprogramowaæ kilka
zdarzeñ wystêpuj¹cych podczas wype³niania formularza. Zdarzeniami
tymi s¹ onfocus (gdy kontrolka staje siê aktywna, tj. gdy kursor zostaje
umieszczony wewn¹trz kontrolki), onblur (gdy kursor opuszcza kon-
trolkê) onselect (gdy w polu tekstowym zostaje zaznaczony pewien
tekst; dotyczy tylko pól tekstowych) oraz onchange (gdy kontrolka
zmienia wartoϾ).
Zdarzenia takie mo¿emy oprogramowaæ w jêzykach skryptowych,
na przyk³ad JavaScript, VB czy tcl.
Elementy INPUT
Element INPUT s³u¿y do umieszczania w formularzu kilku ró¿nych
rodzajów kontrolek, m.in. wierszy wprowadzania danych, pól wyboru
oraz wykluczaj¹cych pól wyboru. Posiada on atrybut type, który decy-
duje o typie kontrolki. Wartoœci¹ domyœln¹ atrybutu type jest text.
Kontrolka INPUT typu text s³u¿y do wprowadzenia jednej linii tekstu.
Lista atrybutów elementu INPUT jest doœæ pokaŸna. Pe³ne zesta-
wienie jest zawarte w tabeli 4 (na CD). Atrybuty elementu INPUT ma-
j¹ ró¿ne znaczenie w zale¿noœci od typu kontrolki (czyli wartoœci atry-
butu type).
Przyciski zatwierdzające i resetujące formularz
Niemal ka¿dy formularz posiada przycisk zatwierdzaj¹cy. Przycisk
taki tworzymy stosuj¹c kontrolkê INPUT typu submit:
<INPUT type=”submit” value=”Submit”>
Atrybut value ustala etykietê przycisku. Etykiet¹ mo¿e byæ dowol-
ny napis, na przyk³ad OK lub Wyœlij.
Jeden formularz mo¿e mieæ kilka przycisków zatwierdzaj¹cych
wys³anie. Wówczas przyciski powinny posiadaæ atrybut name, umo¿li-
wiaj¹cy stwierdzenie, który z nich zosta³ naciœniêty.
HTML/PHP
INTERNET.maj.2005
95
WARSZTAT
PROGRAMY
MAGAZYN
FIRMA
Z OK£ADKI
NEWSY
NA CD
C
M
Y
K
<INPUT type=”submit” value=”Zaloguj” name=”login”>
<INPUT type=”submit” value=”Wyloguj” name=”login”>
<INPUT type=”submit” value=”Zmieñ has³o”
©
name=”passwd”>
Po naciœniêciu jednego z przycisków formularz zostanie wys³any
na serwer. W tablicy $_POST bêdzie dostêpna zmienna o indeksie
ustalonym na podstawie atrybutu name i wartoœci równej atrybutowi
value naciœniêtego przycisku. Na przyk³ad po naciœniêciu przycisku
o etykiecie Wyloguj otrzymamy:
$_POST[’login’] === ’Wyloguj’
Przycisk do resetowania formularza posiada typ reset. Podobnie jak
w przypadku przycisku wysy³aj¹cego formularz, atrybut value stanowi
etykietê przycisku:
<INPUT type=”reset” value=”Resetuj”>
Wiersz wprowadzania danych
Najczêœciej stosowan¹ kontrolk¹ formularzy jest wiersz wprowadzania
danych. Kontrolkê tak¹ tworzymy stosuj¹c element INPUT typu text:
<INPUT type=”text” name=”imie”>
Poniewa¿ wartoœæ text jest wartoœci¹ domyœln¹, zatem powy¿sz¹
kontrolkê mo¿na w równowa¿ny sposób zapisaæ jako:
<INPUT name=”imie”>
W stosunku do wiersza wprowadzania danych zastosowanie znaj-
duj¹ wspomniane ju¿ atrybuty ogólne: name, value, readonly, disabled,
accesskey oraz tabindex, jak równie¿ size i maxlength.
Atrybut size ustala szerokoœæ pola mierzony liczb¹ znaków. Natomiast
wartoœæ maxlength ogranicza liczbê znaków, jak¹ kontrolka pomieœci.
Pole hasła
Pole INPUT typu password s³u¿y do wprowadzania has³a. Napis wpro-
wadzany do kontrolki nie jest widoczny na ekranie. Kontrolka taka ma
postaæ:
<INPUT type=”password” name=”haslo”>
Nale¿y pamiêtaæ, ¿e has³o wprowadzone do formularza nie pod-
lega ¿adnej ochronie. Jest ono przekazywane w zapytaniu HTTP
jako zwyk³y, niezaszyfrowany tekst. Jedyn¹ ochron¹, jak¹ zapew-
nia pole typu password, jest uniemo¿liwienie podejrzenia has³a na
ekranie.
Dla pola tekstowego typu password znaczenie atrybutów jest iden-
tyczne, jak w przypadku zwyk³ego pola tekstowego typu text.
Rys. 2. Standardowe pole
tekstowe oraz pole typu
password
Ustalanie szerokoœci kontrolek INPUT mo¿emy zrealizowaæ stosu-
j¹c atrybut size, jak równie¿ wykorzystuj¹c arkusze stylów. W formu-
larzu z rysunku 2 kontrolki INPUT maj¹ szerokoœæ 100 pikseli ustalo-
n¹ stylem:
INPUT {
width : 100px;
}
Pola wyboru
Element INPUT typu checkbox stanowi pole wyboru, które mo¿emy
zaznaczyæ lub odznaczyæ. W najprostszej postaci pole wygl¹da nastê-
puj¹co:
<INPUT type=”checkbox” name=”win95”>
Po przes³aniu formularza zawieraj¹cego powy¿sze pole w skrypcie
dostêpna bêdzie zmienna $_POST[’win95’] o wartoœci on:
$_POST[’win95’] === ’on’
Jeœli pole posiada atrybut value, np.:
<INPUT type=”checkbox” name=”dos” value=”MSDOS”>
to zmienna dostêpna w skrypcie przyjmie wartoœæ ustalon¹ atrybutem
value. W powy¿szym przyk³adzie bêdzie to:
$_POST[’dos’] === ’MSDOS’
Dodatkowo, atrybut checked mo¿e byæ wykorzystany do inicjaliza-
cji pól wyboru. Pola nie posiadaj¹ce atrybutu checked s¹ domyœlnie
odznaczone, zaœ pola z podanym atrybutem checked s¹ zaznaczone.
Dowolna liczba pól wyboru mo¿e byæ równoczeœnie zaznaczona.
<INPUT type=”checkbox” name=”win98” checked=”checked”>
Rys. 3. Pola wyboru
Zwróæmy uwagê, ¿e wszystkie pola
wyboru posiadaj¹ w³asne wartoœci atry-
butów name. S¹ one wówczas przeka-
zywane jako niezale¿ne zmienne do
skryptu.
Jak ju¿ wspomnieliœmy, w jêzyku PHP mo¿liwe jest równie¿ prze-
kazanie powi¹zanych ze sob¹ opcji wyboru w postaci tablicy. W tym
celu nale¿y wszystkim powi¹zanym ze sob¹ znaczeniowo polom wy-
boru nadaæ identyczn¹ nazwê, zakoñczon¹ nawiasami kwadratowymi:
<INPUT type=”checkbox” name=”system[]”
©
value=”Linux”>
<INPUT type=”checkbox” name=”system[]”
©
value=”FreeBSD”>
...
Ka¿da z opcji musi posiadaæ atrybut value. W takim przypadku, po
zatwierdzeniu formularza, w skrypcie w PHP w tablicy $_POST pod
indeksem system (jest to wartoœæ atrybutu name) dostêpna bêdzie ta-
blica zawieraj¹ca wartoœci atrybutów value wszystkich zaznaczonych
pól wyboru o wartoœci atrybutu name=”system[]”.
Wykluczające pola wyboru
Drugim rodzajem pól wyboru s¹ pola wzajemnie siê wykluczaj¹ce.
W odró¿nieniu od pól wyboru typu checkbox, tylko jedno spoœród kil-
ku pól INPUT typu radio mo¿e byæ zaznaczone.
POLSKA: <INPUT type=”radio” name=”kraj”
©
value=”PL”>
NIEMCY: <INPUT type=”radio” name=”kraj”
©
value=”DE”>
Wszystkie powi¹zane ze sob¹ pola musz¹ mieæ identyczn¹ wartoœæ
atrybutu name. W powy¿szym przyk³adzie wartoœci¹ t¹ jest napis kraj.
HTML/PHP
INTERNET.maj.2005
96
NA CD
NEWSY
Z OK£ADKI
FIRMA
MAGAZYN
PROGRAMY
WARSZTAT
Ponadto ka¿de pole wyboru musi mieæ wartoœæ ustalon¹ atrybutem
value. Po zatwierdzeniu formularza tablica $_POST bêdzie zawiera³a
element o indeksie równym atrybutowi name i wartoœci równej atrybu-
towi value wybranego pola, na przyk³ad:
$_POST[’kraj’] === ’PL’
Kontrolki mo¿emy zainicjowaæ stosuj¹c – podobnie jak w przypad-
ku pól typu checkbox – atrybut checked. Tym razem jednak mo¿emy
zaznaczyæ najwy¿ej jedno pole.
Dodajmy, ¿e formularz mo¿e zawieraæ kilka niezale¿nych grup
kontrolek radio, na przyk³ad wybór kraju oraz dyscypliny sportu. Oba
wybory s¹ niezale¿ne. W ramach ka¿dej kategorii mo¿emy zaznaczyæ
jedynie jeden element. W takim przypadku obie grupy kontrolek s¹
odró¿niane na podstawie atrybutu name. Kontrolki z ka¿dej grupy
wspó³dziel¹ unikaln¹ nazwê.
Rys. 4 Wykluczaj¹ce siê wzajemnie
pola wyboru
Kontrolki ukryte
Kolejnym typem kontrolek INPUT s¹ kontrolki
ukryte. Kontrolki takie s¹ niewidoczne i s³u¿¹
do przekazania dodatkowych zmiennych.
Poniewa¿ nie s¹ one widoczne, nie mo¿na zmie-
niaæ ich wartoœci za pomoc¹ myszy czy klawiatury. Oto przyk³adowe
kontrolki ukryte:
<INPUT type=”hidden” name=”cena” value=”123456”>
<INPUT type=”hidden” name=”valuta” value=”EURO”>
Mo¿emy je wykorzystaæ na przyk³ad do podpisywania formularza.
Umieszczaj¹c w formularzu pole ukryte zawieraj¹ce pewn¹, wygene-
rowan¹ przez skrypt, trudn¹ do odgadniêcia wartoœæ mo¿emy upewniæ
siê, ¿e dane przes³ane po zatwierdzeniu skryptu pochodz¹ faktycznie
z formularza.
Nale¿y mieæ œwiadomoœæ, ¿e kontrolki ukryte nie s¹ w ¿aden sposób
zaszyfrowane ani schowane przed u¿ytkownikiem. Zagl¹daj¹c do Ÿró-
d³a strony ujrzymy wszystkie ukryte kontrolki zawarte w formularzu.
Dane przekazywane w postaci kontrolek ukrytych warto zaszyfrowaæ.
Poniewa¿ kontrolki te nie s¹ w ogóle wyœwietlane przez przegl¹-
darkê, zatem w odniesieniu do nich nie ma sensu stosowanie dodatko-
wych atrybutów.
Przyciski
Kontrolka INPUT typu button jest przyciskiem. Przyciski takie po
naciœniêciu nie powoduj¹ ¿adnej predefiniowanej akcji ze strony prze-
gl¹darki – ani nie resetuj¹ zawartoœci, ani nie wysy³aj¹ formularza.
W celu wykorzystania takiego przycisku, nale¿y oprogramowaæ obs³u-
gê zdarzeñ.
<INPUT type=”button” value=”Pierwszy”>
<INPUT type=”button” value=”Drugi”>
<INPUT type=”submit” value=”Wyœlij”>
Kontrolka wyboru pliku
Pole INPUT typu file s³u¿y do przekazywania za pomoc¹ formularza
pliku na serwer. Kontrolka taka jest przedstawiana w formularzu w po-
staci przycisku z napisem Przegl¹daj... Po naciœniêciu przycisku prze-
gl¹darka wyœwietla okno dialogowe, które umo¿liwia wybór pliku. Po
dokonaniu wyboru i zatwierdzeniu formularza na serwer zostaje prze-
kazany wybrany plik.
Kontrolka taka posiada dwa istotne atrybuty: type oraz name. Atry-
but name ustala nazwê zmiennej przekazanej do skryptu:
<INPUT type=”file” name=”plik”>
Formularz zawieraj¹cy kontrolki typu file musi byæ przekazywany
metod¹ POST. Ponadto nale¿y ustaliæ sposób kodowania danych po-
chodz¹cych z formularza jako enctype=”multipart/form-data”.
W jaki sposób odczytaæ zawartoœæ plików przekazanych na serwer
w jêzyku PHP? W odró¿nieniu do innych kontrolek pliki przekazane na
serwer nie s¹ zawarte w tablicy $_POST, a w tablicy $_FILES. Tablica
$_FILES jest tablic¹ wielowymiarow¹. Jeœli kontrolka INPUT posiada
atrybut name=”plik”, wówczas informacje na temat pliku przekazanego
na serwer s¹ zawarte w nastêpuj¹cych polach tablicy $_FILES:
$_FILES[’plik’][’name’]
$_FILES[’plik’][’type’]
$_FILES[’plik’][’tmp_name’]
$_FILES[’plik’][’error’]
$_FILES[’plik’][’size’]
Tablica $_FILES zawiera informacje na temat przekazanego pliku,
nie zawiera natomiast samego pliku. Plik jest zapisany na dysku pod
nazw¹ $_FILES[’plik’][’tmp_name’]. Jeœli chcemy przeczytaæ jego
zawartoœæ, to mo¿emy do tego wykorzystaæ nastêpuj¹c¹ instrukcjê:
$rob = file_get_contents($_FILES[’plik’][’tmp_name’]);
Nale¿y pamiêtaæ, ¿e plik ten zostanie usuniêty automatycznie po
zakoñczeniu przetwarzania skryptu. Nale¿y albo go przetworzyæ, ko-
rzystaj¹c z powy¿szej instrukcji, albo przenieœæ do innego folderu, sto-
suj¹c funkcjê move_uploaded_file().
W formularzu warto umieœciæ (przed kontrolk¹ typu file) ukryte po-
le ustalaj¹ce wartoœæ zmiennej MAX_FILE_SIZE. Wartoœæ taka ogra-
nicza wielkoœæ pliku, jaki mo¿emy przekazaæ za pomoc¹ formularza.
Nie jest to zabezpieczenie przed z³oœliwymi u¿ytkownikami, gdy¿
³atwo je omin¹æ (na przyk³ad przygotowuj¹c w³asny formularz; do
zabezpieczenia przed z³oœliwymi u¿ytkownikami nale¿y stosowaæ
opcje konfiguracyjne PHP: file_uploads, upload_max_filesize oraz
upload_tmp_dir). Jednak dziêki zawarciu w formularzu informacji
o maksymalnym rozmiarze pliku, unikniemy sytuacji, w której u¿yt-
kownik czeka d³u¿szy czas tylko po to, by zobaczyæ komunikat (pocho-
dz¹cy ze skryptu PHP) informuj¹cy o tym, ¿e wybrany plik jest zbyt
du¿y. Jeœli informacja o maksymalnym rozmiarze jest zawarta w for-
mularzu, to przegl¹darka nie wysy³a na serwer zbyt du¿ych plików.
<INPUT type=”hidden” name=”MAX_FILE_SIZE”
©
value=”3000”>
Podana wielkoϾ jest mierzona w bajtach.
Obraz
Ostatnim typem kontrolek INPUT jest typ image. Kontrolka taka s³u¿y do
umieszczenia w formularzu obrazu. Po klikniêciu obrazu formularz zostaje
przes³any, zaœ do skryptu przekazywane s¹ wspó³rzêdne klikniêtego piksela.
Obowi¹zkowymi atrybutami s¹ type, name, src oraz alt. Atrybut src
ustala adres URL wyœwietlanego obrazu, natomiast alt zawiera tekst
alternatywny. (Rola obydwu atrybutów jest analogiczna jak w przypadku
elementu IMG.)
Oto kod przyk³adowej kontrolki tego typu:
<INPUT type=”image” name=”obraz” src=”z.jpg”
©
alt=”Przyk³ad kontrolki INPUT typu image.”>
W wyniku klikniêcia obrazu do skryptu zostan¹ przekazane zmienne
obraz_x oraz obraz_y zawieraj¹ce wspó³rzêdne klikniêtego piksela obrazu:
HTML/PHP
INTERNET.maj.2005
97
WARSZTAT
PROGRAMY
MAGAZYN
FIRMA
Z OK£ADKI
NEWSY
NA CD
C
M
Y
K
$_POST[’obraz_x’] === ’83’
$_POST[’obraz_y’] === ’178’
Nazwy zmiennych obraz_x oraz obraz_y powstaj¹ przez dodanie od-
powiednich przyrostków do nazwy kontrolki ustalonej atrybutem name.
Rys. 5. Kontrolka INPUT
typu image
Element BUTTON
Kolejnym elementem s³u¿¹cym
do tworzenia kontrolek formula-
rzy jest element BUTTON.
Element ten s³u¿y do tworzenia
przycisków. Atrybut type, o poprawnych wartoœciach submit, reset
oraz button, ustala rodzaj przycisku. Przycisk wykonany z wykorzysta-
niem elementu BUTTON ma nastêpuj¹cy kod:
<BUTTON type=”submit” name=”p1”>Wyœlij</BUTTON>
Jego dzia³anie jest identyczne jak w przypadku przycisku:
<INPUT type=”submit” name=”p1”>
Podobnie przycisk BUTTON typu reset odpowiada przyciskowi INPUT
typu reset, zaœ BUTTON typu button – przyciskowi INPUT typu button.
Jedyna ró¿nica pomiêdzy guzikami tworzonymi elementami
BUTTON i INPUT polega na tym, ¿e przyciski BUTTON posiadaj¹
znaczniki: otwieraj¹cy i zamykaj¹cy. Dziêki temu mog¹ posiadaæ
zawartoœæ. Jako zawartoœæ przycisku mo¿emy podaæ element IMG.
Podany obraz zostanie umieszczony na przycisku.
Kod:
<BUTTON name=”wyslanie” type=”submit”>
<IMG src=”otworz.png” alt=”Wysy³anie formularza”>
</BUTTON>
tworzy przycisk przedstawiony na rys. 6.
Rys. 6.
Przycisk z ikon¹
Listy
Elementy SELECT, OPTION oraz OPTGROUP s³u¿¹ do tworzenia
list. Wewn¹trz elementu SELECT umieszczamy poszczególne elemen-
ty listy definiowane elementem OPTION. Dodatkowo, opcje listy mog¹
byæ pogrupowane elementami OPTGROUP. Poprawn¹ zawartoœci¹ ele-
mentu SELECT s¹ wy³¹cznie elementy OPTION oraz OPTGROUP.
W najprostszym przypadku lista sk³ada siê z elementu SELECT
zawieraj¹cego kilka opcji OPTION:
<SELECT name=”dzien”>
<OPTION>Poniedzia³ek</OPTION>
<OPTION>Wtorek</OPTION>
<OPTION>Œroda</OPTION>
...
</SELECT>
Po wybraniu pierwszego elementu listy i zatwierdzeniu formularza,
w skrypcie bêdzie dostêpna zmienna:
$_POST[’dzien’] === ’Poniedzia³ek’
Opcje OPTION mog¹ posiadaæ dodatkowo atrybuty value oraz selec-
ted. Atrybut value ustala wartoϾ zmiennej przekazanej do skryptu. Po
wybraniu z poni¿szej listy opcji Wtorek i zatwierdzeniu formularza:
<SELECT name=”dzien”>
<OPTION>Poniedzia³ek</OPTION>
<OPTION value=”2”>Wtorek</OPTION>
...
</SELECT>
do skryptu zostanie przekazana zmienna:
$_POST[’dzien’] === ’2’
Natomiast atrybut selected s³u¿y do wskazania elementu listy, któ-
ry powinien byæ pocz¹tkowo wybrany.
Domyœlnie, listy wyboru s¹ wyœwietlane w postaci list rozwijanych,
które umo¿liwiaj¹ wybranie tylko jednego elementu. W³aœciwoœci listy
mo¿emy zmieniæ stosuj¹c atrybuty size oraz multiple elementu
SELECT. Atrybut size ustala liczbê elementów listy, które bêd¹ widocz-
ne na ekranie (wartoœci¹ domyœln¹ jest 1 – lista rozwijana). Lista:
<SELECT name=”dzien” size=”3”>
<OPTION>Poniedzia³ek</OPTION>
<OPTION>Wtorek</OPTION>
<OPTION>Œroda</OPTION>
<OPTION>Czwartek</OPTION>
...
</SELECT>
bêdzie wyœwietlana w postaci prostok¹ta zawieraj¹cego trzy wiersze
i wyposa¿onego w suwak.
Natomiast atrybut multiple jest atrybutem logicznym, który umo¿li-
wia zaznaczanie na liœcie kilku elementów. Zwróæmy uwagê, ¿e
w przypadku stosowania list wielokrotnego wyboru wygodnym jest
– podobnie jak w przypadku pól wyboru – stosowanie nazwy zakoñ-
czonej nawiasami kwadratowymi:
<SELECT name=”dzien[]” size=”7”
©
multiple=”multiple”>
Wówczas, tablica $_POST bêdzie zawiera³a element o indeksie
dzien. Element ten bêdzie tablic¹ zawieraj¹c¹ wartoœci wszystkich ele-
mentów wybranych na liœcie wielokrotnego wyboru.
Rys. 7. Listy wyboru
Stosuj¹c element OPTGROUP
mamy mo¿liwoœæ nadania liœcie
struktury. Opcje ograniczone
znacznikami OPTGROUP stano-
wi¹ podmenu ni¿szego poziomu.
Atrybut label elementu OPT-
GROUP ustala etykietê grupy
opcji:
HTML/PHP
INTERNET.maj.2005
98
NEWSY
Z OK£ADKI
FIRMA
MAGAZYN
PROGRAMY
WARSZTAT
NA CD
C
M
Y
K
<SELECT name=”auto”>
<OPTGROUP label=”Fiat”>
<OPTION value=”fiatalabea”>Alabea</OPTION>
<OPTION value=”fiatmultipla”>Multipla</OPTION>
...
</OPTGROUP>
<OPTGROUP label=”Ford”>
<OPTION value=”fordEscort”>Escort</OPTION>
<OPTION value=”fordfiesta”>Fiesta</OPTION>
...
</OPTGROUP>
...
</SELECT>
Etykieta taka jest wyt³uszczona na liœcie i nie mo¿na jej zaznaczyæ.
Lista stosuj¹ca elementy OPTGROUP zosta³a zilustrowana na rysunku 8.
Rys. 8. Lista z opcjami
pogrupowanymi elementami
OPTGROUP
Pole tekstowe
Ostatnim rodzajem kontrolek dostêpnych
w jêzyku HTML, które umo¿liwiaj¹
wprowadzanie danych, s¹ pola tekstowe.
Pole takie definiujemy elementem
TEXTAREA. Atrybuty rows oraz cols
ustalaj¹ wymiar pola tekstowego mierzo-
ny liczb¹ wierszy i kolumn tekstu.
Poni¿sze pole tekstowe liczy piêæ
wierszy tekstu. W ka¿dym wierszu mo-
¿emy umieœciæ 10 znaków:
<TEXTAREA name=”list” rows=”5” cols=”10”>
Kto?
Gdzie?
Kiedy?
</TEXTAREA>
Po wprowadzeniu wiêkszej liczby wierszy tekstu suwak pionowy
kontrolki stanie siê aktywny. Natomiast szerokoœæ kontrolki nie podle-
ga zmianie nawet po wprowadzeniu d³ugiego tekstu. Suwak poziomy
równie¿ siê nie pojawia – zbyt d³ugi tekst zostaje zawiniêty.
Pocz¹tkowa zawartoœæ kontrolki jest umieszczana pomiêdzy znacz-
nikami TEXTAREA.
Grupowanie i podpisywanie kontrolek formularza
Dodatkowymi elementami, jakie mo¿emy umieœciæ w formularzu, s¹
etykiety LABEL, elementy grupuj¹ce FIELDSET oraz podpisy grup
LEGEND. Elementy te nie umo¿liwiaj¹ wprowadzania danych do for-
mularza. Modyfikuj¹ jedynie wygl¹d oraz strukturê formularza, dziê-
ki czemu formularz staje siê bardziej czytelny. Etykiety LABEL s³u¿¹
do podpisania kontrolek. Umieszczamy je w formularzu na dwa spo-
soby. Po pierwsze mo¿emy podpisywan¹ kontrolkê umieœciæ
wewn¹trz etykiety:
<P>
<LABEL>
Imiê:
<INPUT name=”imie”>
</LABEL>
</P>
W powy¿szym przyk³adzie tekst Imiê jest podpisem pola INPUT
(pamiêtajmy, ¿e element LABEL nie mo¿e wystêpowaæ bezpoœrednio
w formularzu; konieczne jest u¿ycie elementu blokowego, na przyk³ad
akapitu).
Po drugie mo¿emy wykorzystaæ atrybut for elementu LABEL.
Atrybut ten zawiera identyfikator kontrolki, z któr¹ zwi¹zana jest
etykieta:
<TR>
<TD><LABEL for=”fimie”>Imiê:</LABEL></TD>
<TD><INPUT name=”imie” id=”fimie”></TD>
</TR>
Drug¹ z podanych metod mo¿emy wykorzystaæ tak¿e w przypadku
stosowania tabel do u³o¿enia kontrolek formularza.
W odniesieniu do standardowych przegl¹darek: Internet Explorer,
FireFox, Opera czy Netscape, stosowanie etykiet LABEL nie niesie
¿adnych korzyœci. Powy¿sze dwa przyk³ady wygl¹da³yby zupe³nie
identycznie bez zastosowania etykiet. Sytuacja zmienia siê w przypad-
ku nietypowych przegl¹darek (na przyk³ad przegl¹darek przeznaczo-
nych dla osób niewidomych), Przegl¹darki takie mog¹ wykorzystaæ
powi¹zanie etykiet z kontrolkami do poinformowania u¿ytkownika
o roli kontrolki.
Etykiety, podobnie jak i inne kontrolki formularzy, mog¹ posiadaæ
skrót klawiszowy. W przypadku przeniesienia kursora do etykiety (po-
przez aktywacjê skrótu klawiszowego lub klikniêcie etykiety; klikniê-
cie etykiety dzia³a poprawnie – w Internet Explorerze – jedynie wtedy,
gdy stosujemy etykiety wykorzystuj¹ce atrybut for), kursor zostanie
faktycznie umieszczony w kontrolce skojarzonej z etykiet¹.
Kontrolki dotycz¹ce podobnej tematyki mo¿emy zgrupowaæ stosu-
j¹c element FIELDSET. Element ten nale¿y do grupy elementów
blokowych i mo¿e wystêpowaæ bezpoœrednio pomiêdzy znacznikami
formularza. Kontrolki umieszczone wewn¹trz elementu FIELDSET
zostan¹ otoczone obramowaniem. Ramkê mo¿emy wzbogaciæ o pod-
pis, stosuj¹c element LEGEND. Jedynymi atrybutami elementu
FIELDSET s¹ atrybuty grupy attrs, natomiast element LEGEND po-
siada ponadto atrybut accesskey.
Rysunek 9 przedstawia formularz zawieraj¹cy dwie grupy kontro-
lek podpisane „Kto wygra mistrzostwa œwiata w pi³ce no¿nej w 2006
roku?” oraz „Którzy polscy zawodnicy zostan¹ powo³ani do kadry?”
Pierwsza z grup jest zdefiniowana nastêpuj¹cym kodem HTML:
<FIELDSET>
<LEGEND>
Kto wygra mistrzostwa œwiata w pi³ce no¿nej w 2006 roku?
</LEGEND>
<INPUT type=”radio” name=”wygrany” value=”DE”> Niemcy<BR>
<INPUT type=”radio” name=”wygrany” value=”PL”> Polska<BR>
<INPUT type=”radio” name=”wygrany” value=”FR”> Francja<BR>
<INPUT type=”radio” name=”wygrany” value=”IT”> W³ochy
</FIELDSET>
Rys. 9. Pola wyboru
pogrupowane elementami
FIELDSET. Obie grupy
podpisano stosuj¹c elementy
LEGEND
Ćwiczenia przedstawione w artykule są dostępne na stronie domowej
autora pod adresem
http://www.gajdaw.pl.
HTML/PHP
INTERNET.maj.2005
99
WARSZTAT
PROGRAMY
MAGAZYN
FIRMA
Z OK£ADKI
NEWSY
NA CD
C
M
Y
K