Formulß°i jsme se zab²vali i v n∞kolika p°edchozφch dφlech serißlu. Dnes na nßs Φekajφ poslednφ prvky formulß°∙, kterΘ jsme dosud neprobrali.
SELECT
. Pou₧ijeme ho
v p°φpad∞, kdy chceme u₧ivateli nabφdnout mo₧nost v²b∞ru jednΘ z
n∞kolika polo₧ek. Pokud pou₧ijeme atribut MULTIPLE
, m∙₧e
u₧ivatel vybrat i vφce polo₧ek ne₧ jednu. JmΘno vstupnφho prvku se op∞t
urΦuje pomocφ atributu NAME
. D∙le₧it²m atributem je
SIZE
, kter² urΦuje poΦet °ßdek, na kter²ch se seznam
zobrazφ. Polo₧ky, kterΘ se do tohoto prostoru nevejdou, budou p°φstupnΘ
rolovßnφm v seznamu.
JednotlivΘ polo₧ky seznamu se zapisujφ pomocφ elementu
OPTION
. Jako hodnota polo₧ky se skriptu p°edß text uveden²
mezi tagy <OPTION>
a </OPTION>
.
Text je vÜak mnohdy dlouh² a nevhodn² pro dalÜφ zpracovßnφ skriptem.
Pokud u OPTION
pou₧ijeme atribut VALUE
, bude
se p°enßÜet jeho obsah mφsto obsahu celΘho elementu.
Pokud mß b²t n∞jakß polo₧ka vybrßna ji₧ hned po zobrazenφ, oznaΦφme
ji pomocφ atributu SELECTED
.
UkonΦovacφ tag </OPTION>
nemusφme ve v∞tÜin∞
p°φpad∙ v∙bec pou₧φvat -- uÜet°φme si tak psanφ:
<FORM ACTION=11-01.php3 METHOD=GET> ╚φsla Φasopis∙, o kterß mßte zßjem: <BLOCKQUOTE> <SELECT NAME="Cisla[]" SIZE=6 MULTIPLE> <OPTION>1/98 <OPTION>2/98 <OPTION>3/98 <OPTION>4/98 <OPTION>5/98 <OPTION>6/98 </SELECT> </BLOCKQUOTE> <P>Formßt, ve kterΘm chcete Φφsla obdr₧et: <SELECT NAME=Fmt SIZE=1> <OPTION VALUE="HTML">HTML strßnka <OPTION VALUE="PDF">Portable Document Format <OPTION VALUE="PS" SELECTED>PostScript <OPTION VALUE="ASCII">Textov² soubor </SELECT> <P>E-mail pro zaslßnφ: <INPUT NAME=Email> <P><INPUT TYPE=SUBMIT VALUE=" OK "> </FORM>Ve jmΘnu prvnφho seznamu jsme pou₧ili hranatΘ zßvorky (
Cisla[]
), aby PHP pro ·daje z tohoto prvku formulß°e
vytvo°ilo pole. Je to nutnΘ, proto₧e u₧ivatel m∙₧e vybrat vφce Φφsel
Φasopisu najednou (dφky atributu MULTIPLE
).
U vstupnφho pole pro e-mailovou adresu jsme neuvedli typ pole. P°esto
se jednß o textovΘ vstupnφ pole, proto₧e standardnφ hodnota atributu
TYPE
je TEXT
.
Informace z formulß°e podle pot°eby zpracujeme. Nßsleduje krßtkß
ukßzka ze skriptu 11-01.php3
, kterß vypφÜe hodnoty vypln∞nΘ
do formulß°e:
<P>VybranΘ Φasopisy:<BR> <? for ($i=0; $i<Count($Cisla); $i++): echo $Cisla[$i]."<BR>"; endfor; ?> <P>Po₧adovan² formßt: <?echo $Fmt?> <P>Zaslat na: <?echo $Email?>
TEXTAREA
. Jeho
jmΘno se urΦuje op∞t pomocφ atributu NAME
. Krom∞ toho
musφme pomocφ atribut∙ ROWS
a COLS
urΦit poΦet
°ßdek a sloupc∙ vstupnφho pole.
P°i pou₧itφ musφme v₧dy pou₧φvat poΦßteΦnφ i ukonΦovacφ tag. Text mezi nimi se zobrazφ na zaΦßtku editace ve vstupnφm poli.
<TEXTAREA NAME="Poznamka" ROWS=4 COLS=40> Sem m∙₧ete vepsat dalÜφ informace o objednßvce. D∞kujeme </TEXTAREA>
Vytvo°it p°ehledn² formulß°, zvlßÜt∞ pokud mß obsahovat mnoho vstupnφch polφ, je n∞kdy um∞nφ. I p°esto existuje n∞kolik zßsad, jejich₧ dodr₧ovßnφ nßm pom∙₧e vytvß°et pro u₧ivatele p°ehlednΘ formulß°e.
P°ehledn² formulß° mß jednotlivß vstupnφ pole jasn∞ oznaΦena a zarovnßna p°ehledn∞ pod sebou. K dosa₧enφ tohoto efektu lze vyu₧φt tabulku -- prvnφ sloupec bude obsahovat popis vstupnφho pole a druh² samotnΘ vstupnφ pole.
Celkem u₧iteΦnΘ je u₧ivateli napov∞d∞t v jakΘ form∞ mß data do
jednotliv²ch vstupnφ polφ zadßvat. M∙₧eme tedy do tabulky p°ipojit t°etφ
sloupec, kter² bude znßzor≥ovat ukßzkov∞ vypln∞nß data. Druhou mo₧nostφ
je zobrazenφ ukßzkov²ch dat p°φmo ve vstupnφm poli s vyu₧itφm atributu
VALUE
. U₧ivatel pak pouze p°epφÜe p°edp°ipravenΘ ·daje.
Pro u₧ivatele je p°φjemnΘ, pokud vidφ cel² vypl≥ovan² formulß° najednou na obrazovce. Pokud pot°ebujeme od u₧ivatele tolik ·daj∙, ₧e se formulß° nevejde najednou na obrazovku, je lepÜφ vytvo°it n∞kolik strßnek s menÜφmi formulß°i, kterΘ postupn∞ od u₧ivatele vyzv∞dφ po₧adovanΘ ·daje.
Mnoho formulß°∙ na Webu (nap°. r∙znΘ registrace) vy₧adujφ vypln∞nφ pouze n∞kter²ch povinn²ch Φßstφ formulß°e. V t∞chto p°φpadech je vhodnΘ povinnß pole n∞jak odliÜit -- nap°. pou₧itφm v²razn∞jÜφho pφsma nebo barevnΘho pφsma u popisky pole.
Pokud obsluhujφcφ skript zjistφ, ₧e u₧ivatel nevyplnil vÜechny ·daje, po₧aduje dopln∞nφ chyb∞jφcφch. V tomto p°φpad∞ by se p°ed u₧ivatelem m∞l objevit formulß° s ji₧ zadan²mi daty. Bohu₧el na mnoha strßnkßch se v tomto p°φpad∞ objevφ nov² prßzdn² formulß° a u₧ivatel musφ zadßvat vÜe znovu. My si ukß₧eme, jak m∙₧e vypadat formulß°, kter² vy₧aduje vypln∞nφ urΦit²ch polφ, ale nabφzφ u₧ivateli pohodln² zp∙sob dopln∞nφ chyb∞jφcφch ·daj∙:
<HTML> <HEAD> <TITLE>Ukßzkov² formulß°</TITLE> <STYLE TYPE="text/css"> <!-- TD B { color: red } --> </STYLE> </HEAD> <BODY> <? $Formular = true; // p°φznak zobrazovßnφ formulß°e if ($Odeslano=="true"): // Byl formulß° odeslßn? if ($Jmeno=="" || // Kontrola vypln∞nφ $Prijmeni=="" || // povinn²ch ·daj∙ $Email==""): echo "<H1>Musφte vyplnit vÜechny povinnΘ ·daje!</H1>"; echo "Jsou oznaΦeny tuΦn²m Φerven²m popisem."; else: // Mßme povinnß data, zpracujeme je $Formular = false; // Zde se informace z formulß°e zpracujφ echo "<H1>D∞kujeme za registraci!</H1>"; endif; else: // Formulß° je zobrazovßn poprvΘ echo "<H1>Pro zaregistrovßnφ vypl≥te tento formulß°!</H1>"; echo "PovinnΘ ·daje jsou oznaΦeny tuΦn²m Φerven²m popisem."; endif; ?> <? if ($Formular): // mß se zobrazovat formulß°? ?> <FORM METHOD=POST> <TABLE BORDER=0> <TR> <TD><B>JmΘno:</B> <TD><INPUT NAME=Jmeno VALUE="<?echo $Jmeno?>" SIZE=30> <TR> <TD><B>P°φjmenφ:</B> <TD><INPUT NAME=Prijmeni VALUE="<?echo $Prijmeni?>" SIZE=30> <TR> <TD>Pohlavφ: <TD><INPUT TYPE=RADIO NAME=Pohlavi VALUE="Muz" <?echo $Pohlavi=="Muz" ? " CHECKED" : ""?>> Mu₧ <INPUT TYPE=RADIO NAME=Pohlavi VALUE="Zena" <?echo $Pohlavi=="Zena" ? " CHECKED" : ""?>> Äena <TR> <TD><B>E-mail:</B> <TD><INPUT NAME=Email VALUE="<?echo $Email?>" SIZE=30> <TR> <TD>WWW strßnka: <TD><INPUT NAME=Web VALUE="<?echo $Web?>" SIZE=30> <TR> <TH COLSPAN=2><INPUT TYPE=SUBMIT VALUE=" Registrace "> </TABLE> <INPUT TYPE=HIDDEN NAME=Odeslano VALUE=true> </FORM> <? endif ?> </BODY> </HTML>Cel² skript si zajistφ jist∞ mal² komentß°. V²sledkem skriptu mohou b²t t°i odliÜnΘ strßnky -- viz obrßzky 3-5. Pokud je skript vyvolßn u₧ivatelem poprvΘ, zobrazφ se prßzdn² formulß°. Pokud u₧ivatel formulß° odeÜle, mohou nastat dva p°φpady. Pokud jsou vÜechny povinnΘ ·daje vypln∞ny, skript zobrazφ pouze potvrzenφ registrace. Pokud n∞jak² povinn² ·daj chybφ, zobrazφ se formulß°, kter² obsahuje ji₧ d°φve vypln∞nß pole a po₧aduje dopln∞nφ chyb∞jφcφch polφ.
Skript na obsluhu dat z formulß°e volß sßm sebe, a proto nemusφme u
elementu FORM
uvßd∞t pomocφ atributu ACTION
jmΘno skriptu urΦenΘho pro zpracovßnφ formulß°e.
Jak skript poznß, zda je u₧ivatelem vyvolßn poprvΘ nebo zda jen
u₧ivatel nevyplnil ₧ßdnΘ pole? Do formulß°e jsme p°idali skrytΘ pole
(TYPE=HIDDEN
). Toto pole se nezobrazuje, ale jeho hodnota
se p°enßÜφ s ostatnφmi ·daji z formulß°e. Podmφnkou
if ($Odeslano=="true"):tak snadno otestujeme, zda do skriptu ji₧ putujφ ·daje z formulß°e nebo zda je spouÜt∞n poprvΘ.
V dalÜφ Φßsti skriptu testujeme, zda vÜechna povinnß pole obsahujφ n∞jakou hodnotu. Pokud ne, vypφÜeme zßhlavφ strßnky, kterΘ po₧aduje dopln∞nφ chyb∞jφcφch ·daj∙. Pokud jsou vÜechna povinnß pole vypln∞na, pod∞kuje skript za vypln∞nφ formulß°e.
DalÜφ v∞tev skriptu pat°φ k prvnφ podmφnce. Provede se pouze pokud je skript volßn u₧ivatelem poprvΘ a vyzve ho k vypln∞nφ formulß°e.
Nßsleduje samotn² HTML k≤d pro zobrazenφ formulß°e. Tento k≤d se do
prohlφ₧eΦe odeÜle pouze, pokud mß prom∞nnß $Formular
hodnotu true
. Tato prom∞nnß je nastavena na hodnotu
false
, pokud skript obdr₧el vÜechna povinnß pole a my tedy
ji₧ po u₧ivateli nechceme doplnit ₧ßdnΘ ·daje.
Jako hodnotu atributu VALUE
u jednotliv²ch vstupnφch
polφ uvßdφme krßtk² PHP skript, kter² doplnφ obsah tohoto pole z
poslednφho odesφlanΘho formulß°e. Tφm mßme zaruΦeno, ₧e pokud u₧ivatel
vyplnφ pouze n∞kterΘ ·daje a je po₧ßdßn o dopln∞nφ chyb∞jφcφch povinn²ch
·daj∙, nemusφ znovu vypl≥ovat zbytek formulß°e. P°i prvnφm spuÜt∞nφ
skriptu neobsahujφ pou₧itΘ prom∞nnΘ ₧ßdnou hodnotu a vstupnφ pole budou
prßzdnß (viz obr. 3).
Zatφmco dopln∞nφ hodnoty textovΘho vstupnφho pole je jednoduchΘ, u
p°epφnacφch tlaΦφtek je situace pom∞rn∞ slo₧itß. Pokud mß b²t tlaΦφtko
zaÜkrtnuto, je pot°eba u p°φsluÜnΘho tagu <INPUT>
uvΘst atribut CHECKED
. Pou₧ili jsme proto konstrukci:
<?echo $Pohlavi=="Muz" ? " CHECKED" : ""?>Ta pou₧φvß specißlnφ operßtor
podmφnka ? v²raz1 : v²raz2
.
Pokud je podmφnka spln∞na je v²sledkem v²raz1,
jinak v²raz2. Pokud jsme tedy odeslali formulß° se
zaÜkrtnut²m tlaΦφtkem mu₧, vrßtφ skript p°epφnacφ tlaΦφtko:
<INPUT TYPE=RADIO NAME=Pohlavi VALUE="Muz" CHECKED>Pokud nebylo pohlavφ mu₧ vybrßno, dorazφ naopak:
<INPUT TYPE=RADIO NAME=Pohlavi VALUE="Muz">a tlaΦφtko tedy z∙stane nezaÜkrtnutΘ.