Formulß°e poΦtvrtΘ
Ji°φ Kosek ml.
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.
Seznamy
K vytvo°enφ seznamu se pou₧φvß element SELECT. Pou₧ijeme ho v p°φpad∞, kdy u₧ivateli chceme 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 nich₧ 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?>
Vφce°ßdkov² text
Pro vstup delÜφch text∙ je urΦen element 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>
Formulß°e na ·rovni
P°i vytvß°enφ webov²ch formulß°∙ mßme pom∞rn∞ velkou volnost. Snadno se tak m∙₧e stßt, ₧e vytvo°φme formulß°, kter² je pro u₧ivatele nep°ehledn², nebo naopak takov², jen₧ je radost vypl≥ovat.
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 jist∞ zaslou₧φ 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 u₧ivatel jen 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 tehdy, 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Θ.