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 webovskΘ 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 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ß° se na strßnce u₧ivateli jevφ podobn∞ jako dialogovΘ okno. Formulß° 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≥ dva
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 dvou mo₧nostφ
GET
a POST
-- ob∞ metody jsme popsali v
p°edeÜlΘm dφle 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 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φ 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φ 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:
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Üφ.
SELECT
m∙₧eme vytvo°it seznamy, ze
kter²ch lze vybφrat jednu Φi vφce polo₧ek.
TEXTAREA
.
NAME
. P°es toto jmΘno je pak obsah prvku p°φstupn² v
obslu₧nΘm skriptu.
<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φ 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="08-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 08-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 (08-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ß zdrojem Φast²m 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 pou₧itΘ metody p°i odesφlßnφ dat.
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 u₧ivateli p°es rameno heslo. 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).
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, pak ve
skriptu poznßme 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φ dv∞ 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.
TYPE
nastaven²m na hodnotu
RESET
slou₧φ k smazßnφ obsahu formulß°e. Po jeho stisku se
sma₧φ 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.
P°φÜt∞ bude pokraΦovat naÜe seznamovßnφ s jednotliv²mi vstupnφmi prvky formulß°∙.