ZaΦφnßme s formulß°i
Ji°φ Kosek ml.
V minul²ch dφlech jsme se dozv∞d∞li, ₧e pro zadßvßnφ parametr∙ pro naÜe skripty jsou z u₧ivatelskΘho hlediska nejlepÜφ variantou formulß°e za°azenΘ do webovΘ strßnky. V dneÜnφm a n∞kolika dalÜφch dφlech serißlu se proto podrobn∞ podφvßme na vÜechny mo₧nosti, kterΘ nßm jazyk HTML pro tvorbu formulß°∙ nabφzφ. To vÜe doplnφme popisem prßce s takto zadan²mi parametry v PHP a ASP skriptech.
Formulß°, kter² se na strßnce u₧ivateli jevφ podobn∞ jako dialogovΘ okno, m∙₧e obsahovat v∞tÜinu b∞₧n∞ pou₧φvan²ch prvk∙ -- vstupnφ pole, tlaΦφtka, p°epφnaΦe, popisky apod.
Ke vlo₧enφ formulß°e do strßnky slou₧φ pßrov² element FORM. U ka₧dΘho formulß°e bychom m∞li pou₧φt alespo≥ 2 atributy -- ACTION a METHOD. Atribut ACTION obsahuje URL adresu skriptu, kter² bude obsluhovat data z formulß°e -- nejΦast∞ji se zde tedy objevφ adresa n∞kterΘho PHP, ASP Φi CGI skriptu. Atribut METHOD slou₧φ k urΦenφ metody, kterou budou data zaslßna na server. M∙₧eme si vybrat ze 2 mo₧nostφ GET a POST -- ob∞ metody jsme popsali v p°edeÜlΘm dφlu naÜeho serißlu. Pro v∞tÜφ formulß°e bychom m∞li pou₧φvat v²hradn∞ metodu POST. Obecn∞ mß tedy formulß° nßsledujφcφ strukturu:
<FORM ACTION="skript" METHOD="metoda">
definice jednotliv²ch prvk∙ formulß°e
</FORM>
Pro ·plnost jeÜt∞ dodejme, ₧e formulß° nemusφ b²t nutn∞ obsluhovßn jen skriptem. N∞kterΘ prohlφ₧eΦe umo₧≥ujφ obsah formulß°e odeslat na zadanou e-mailovou adresu. V adrese skriptu musφme pou₧φt schΘma mailto. Kostra skriptu pak vypadß takto:
<FORM ACTION="mailto:e-mail" METHOD=POST>
definice jednotliv²ch prvk∙ formulß°e
</FORM>
LepÜφ je vÜak formulß°e obsluhovat skriptem -- i kdyby p°itom m∞l skript jen odeslat data z formulß°e na n∞jakou e-mailovou adresu. Skripty jsou toti₧ nezßvislΘ na prohlφ₧eΦi a pracujφ tedy v₧dy sprßvn∞.
Nynφ se podφvßme na jednotlivΘ prvky, kterΘ m∙₧eme uvnit° formulß°e pou₧φt. Pro vytvo°enφ popis∙ jednotliv²ch vstupnφch polφ Φi pro jejich vhodnΘ uspo°ßdßnφ na strßnce m∙₧eme pou₧φt vÜechny b∞₧nΘ elementy. Podle pot°eby m∙₧eme navφc pou₧φt nßsledujφcφ elementy pro prvky formulß°e:
- Element INPUT slou₧φ pro vytvo°enφ v∞tÜiny vstupnφch prvk∙ jako jsou vstupnφ pole, pole pro zadßnφ hesla, zaÜkrtßvacφ pole, p°epφnacφ tlaΦφtka, tlaΦφtka pro odeslßnφ formulß°e a dalÜφ.
- Pomocφ elementu SELECT m∙₧eme vytvo°it seznamy, ze kter²ch lze vybφrat jednu Φi vφce polo₧ek.
- Pro vstup delÜφch text∙, kterΘ zaberou vφce °ßdek, m∙₧eme pou₧φt element TEXTAREA.
Ka₧d² prvek formulß°e musφ mφt svΘ jmΘno urΦenΘ pomocφ atributu NAME. P°es toto jmΘno je pak obsah prvku p°φstupn² v obslu₧nΘm skriptu.
Vstupnφ pole
Vstupnφ pole slou₧φ pro zadßnφ krßtkΘho textu. Pro jeho vytvo°enφ musφme do formulß°e vlo₧it tag <INPUT> s atributem TYPE nastaven²m na hodnotu TEXT. Maximßlnφ dΘlku textu, kter² p∙jde zadat, m∙₧eme urΦit pomocφ atributu MAXLENGTH. SkuteΦnou velikost pole m∙₧eme nastavit pomocφ atributu SIZE. Poslednφm atributem, kter² m∙₧eme pou₧φt, je VALUE. Jeho hodnota se zobrazφ ve vstupnφm poli a slou₧φ tak jako vodφtko pro u₧ivatele.
Pou₧itφ vstupnφho pole jsme si ukßzali ji₧ v p°edchozφch dφlech. My si nynφ ukß₧eme, jak m∙₧eme vyu₧φt tabulky pro p°ehledn∞jÜφ zformßtovßnφ formulß°e. Ve formulß°i navφc pou₧ijeme tlaΦφtko pro jeho odeslßnφ.
<FORM ACTION="09-01.php3" METHOD=GET>
<TABLE>
<TR><TD>JmΘno:
<TD><INPUT TYPE=TEXT NAME=Jmeno SIZE=30>
<TR><TD>E-mail:
<TD><INPUT TYPE=TEXT NAME=Email SIZE=30>
<TR><TD>Domovskß strßnka:
<TD><INPUT TYPE=TEXT NAME=Web SIZE=30 VALUE="http://">
<TR><TH COLSPAN=2>
<INPUT TYPE=SUBMIT VALUE="Odeslßnφ formulß°e">
</TABLE>
</FORM>
V obslu₧nΘm skriptu 09-01.php3 mßme jednotlivß pole formulß°e p°φstupnß v prom∞nn²ch $Jmeno, $Email a $Web. M∙₧eme s nimi naklßdat dle naÜich pot°eb -- my si prozatφm ukß₧eme, jak je alespo≥ vypsat. Skript v PHP (09-01.php3):
<HTML>
<HEAD>
<TITLE>Obsluha formulß°e</TITLE>
</HEAD>
<BODY>
<H1>Co nßm p°iÜlo z formulß°e:</H1>
<P>JmΘno: <?echo $Jmeno?>
<P>E-mail: <?echo $Email?>
<P>Web: <?echo $Web?>
</BODY>
</HTML>
V²sledek vypln∞nφ formulß°e a jeho odeslßnφ vidφme na obrßzku 2. Skript se stejnou funkΦnostφ m∙₧eme samoz°ejm∞ zapsat i v ASP. Zde jsou jednotlivß vstupnφ pole p°φstupnß pomocφ kolekce Request.QueryString:
<HTML>
<HEAD>
<TITLE>Obsluha formulß°e</TITLE>
</HEAD>
<BODY>
<H1>Co nßm p°iÜlo z formulß°e:</H1>
<P>JmΘno: <%=Request.QueryString("Jmeno")%>
<P>E-mail: <%=Request.QueryString("Email")%>
<P>Web: <%=Request.QueryString("Web")%>
</BODY>
</HTML>
Vidφme, ₧e s PHP i ASP dosßhneme funkΦn∞ shodnΘho v²sledku -- v ASP si vÜak troÜku vφce opot°ebujeme klßvesnici.
Na tomto mφst∞ bych rßd upozornil na jednu vlastnost ASP, kterß b²vß Φast²m zdrojem chyb. V²Üe uveden² skript pracuje pouze s formulß°i, kterß svß data odesφlajφ metodou GET. Pokud bychom ve formulß°i pou₧ili metodu POST, nebude skript fungovat. Musφme jej upravit tak, aby p°ebφral data p°edanß metodou POST -- volßnφ Request.QueryString nahradφme volßnφm Request.Form.
V systΘmu PHP tyto problΘmy odpadajφ, proto₧e pro vÜechny prvky formulß°e jsou vytvo°eny odpovφdajφcφ prom∞nnΘ bez ohledu na druh metody, pou₧itΘ p°i odesφlßnφ dat.
Vstupnφ pole pro zadßnφ hesla
U INPUT pou₧ijeme TYPE=PASSWORD, zφskßme vstupnφ pole vhodnΘ pro zadßnφ hesla. Atributy m∙₧eme pou₧φt stejnΘ jako u obyΦejnΘho vstupnφho pole. Jedin² rozdφl je v tom, ₧e v tomto vstupnφm poli se mφsto u₧ivatelem zapsan²ch znak∙ objevφ hv∞zdiΦky, aby nemohl nikdo p°eΦφst heslo u₧ivateli p°es rameno. Z tohoto d∙vodu je rovn∞₧ vhodnΘ odesφlat cel² formulß° metodou POST -- heslo se pak nezobrazφ jako souΦßst adresy skriptu v prohlφ₧eΦi. I tak vÜak nenφ posφlanφ hesla zdaleka bezpeΦnΘ, proto₧e se heslo neposφlß nijak zaÜifrovanΘ a m∙₧e b²t b∞hem p°enosu zachyceno. SkuteΦn∞ bezpeΦn∞ m∙₧eme heslo posφlat pouze p°es spojenφ zabezpeΦenΘ nap°φklad pomocφ SSL (Secure Socket Layer).
Odeslßnφ formulß°e
Ka₧d² formulß° by m∞l obsahovat alespo≥ jedno tlaΦφtko s atributem TYPE=SUBMIT. Stisk tohoto tlaΦφtka zp∙sobφ odeslßnφ dat z formulß°e na server, kter² data p°edß p°φsluÜnΘmu skriptu.
Text, kter² se objevφ na tlaΦφtku, m∙₧eme nastavit pomocφ atributu VALUE. V jednom formulß°i m∙₧eme pou₧φt i vφce tlaΦφtek pro odeslßnφ, musφ vÜak mφt stejnΘ jmΘno (NAME) a r∙zn² obsah atributu VALUE. KterΘ tlaΦφtko bylo stisknuto, to poznßme ve skriptu podle obsahu prom∞nnΘ se jmΘnem vznikl²m z atributu NAME -- prom∞nnß bude obsahovat hodnotu atributu VALUE p°φsluÜnΘho tlaΦφtka. Malß ukßzka (viz obr. 3):
<FORM ACTION=08-02.php3 METHOD=GET>
Souhlasφte se zn∞nφm licenΦnφ smlouvy:
<INPUT TYPE=SUBMIT NAME="Souhlas" VALUE="Ano">
<INPUT TYPE=SUBMIT NAME="Souhlas" VALUE="Ne">
</FORM>
P°i obsluze tohoto formulß°e budeme v PHP skriptu testovat hodnotu prom∞nnΘ $Souhlas. Na zßklad∞ jejφho obsahu pak podnikneme p°φsluÜnΘ akce -- v naÜem p°φpad∞ vrßtφme rozdφlnΘ verze strßnky. Ukßzka ze skriptu 08-02.php3:
<? if ($Souhlas=="Ano"): ?>
Gratulujeme, ·sp∞Ün∞ jste si zaregistrovali nßÜ program. Nynφ si jej m∙₧ete
<A HREF="/inst/setup.exe">nainstalovat</A>.
<? elseif ($Souhlas=="Ne"): ?>
D∞lßte chybu, kdy₧ nßÜ program nechcete. Bez odsouhlasenφ licenΦnφ smlouvy jej nezφskßte.
<? else: ?>
Sna₧φte se p°elstφt nßÜ registraΦnφ systΘm. Moc se nesna₧te a radÜi si program b∞₧n∞ zaregistrujte.
<? endif ?>
Skript by m∞l v₧dy oÜet°it vÜechny mo₧nΘ stavy. Prvnφ 2 v∞tve naÜeho skriptu testujφ p°φpady, kterΘ nastanou po odeslßnφ formulß°e. Pokud vÜak n∞kdo vyvolß nßÜ skript ruΦn∞ (p°φm²m zadßnφm URL), nemusφ prom∞nnß $Souhlas obsahovat ani jednu z oΦekßvan²ch hodnot. Tento p°φpad jsme oÜet°ili v poslednφ v∞tvi podmφnky.
Vynulovßnφ obsahu formulß°e
TlaΦφtko s atributem TYPE nastaven²m na hodnotu RESET slou₧φ k smazßnφ obsahu formulß°e. Po jeho stisku se sma₧ou vÜechny dosud vypln∞nß vstupnφ pole a u₧ivatel m∙₧e zaΦφt vypl≥ovat formulß° znovu. Popis tlaΦφtka pro smazßnφ se op∞t urΦuje pomocφ atributu VALUE. Hodnota tohoto tlaΦφtka nenφ nikdy posφlßna zp∞t na server jako souΦßst dat vypln∞n²ch do formulß°e.