|
PHP a HTML majφ hodn∞ spoleΦnΘho: PHP generuje HTML, a HTML mß informace,
kterΘ budou poslßny PHP.
- 1.
JakΘ zak≤dovßnφ/dek≤dovßnφ pot°ebuji, kdy╛ posφlßm hodnotu p°es
formulß°? A v URL?
- 2.
Zkou╣φm pou╛φt tag <input type="image">, ale prom∞nnΘ
$foo.x a $foo.y nejsou dostupnΘ. Kde jsou?
- 3. Jak vytvo°φm pole ("array") v HTML formulß°i?
- 4.
Jak zφskßm v╣echna data z HTML elementu pro vφcenßsobn² v²b∞r?
1.
JakΘ zak≤dovßnφ/dek≤dovßnφ pot°ebuji, kdy╛ posφlßm hodnotu p°es
formulß°? A v URL?
Je vφce situacφ, pro kterΘ je zak≤dovßnφ d∙le╛itΘ. Za p°edpokladu, ╛e
mßte string $data, kter² obsahuje
°et∞zec, jen╛ mßte nezak≤dovan² a chcete ho poslat, je t°eba se zab²vat
t∞mito relevantnφmi problΘmy:
HTML interpretace. Pokud specifikujete nßhodn² (obecn²) °et∞zec,
musφte ho dßt do uvozovek a cel² ho zpracovat
funkcφ htmlspecialchars() (aby se
odstranily/p°evedly specißlnφ znaky jazyka HTML).
URL: sestßvß z n∞kolika Φßstφ. Pokud chcete, aby va╣e data byla
interpretovßna jako jedna polo╛ka, musφte
je zak≤dovat pomocφ urlencode().
P°φklad 50-1. Skryt² element HTML formulß°e <?php
echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n";
?> |
|
Poznßmka:
Je chybou pou╛φt urlencode() pro
$data, proto╛e prohlφ╛eΦe samy zaji╣╗ujφ
zpracovßnφ dat shodnΘ s funkcφ urlencode().
V╣echny oblφbenΘ prohlφ╛eΦe to d∞lajφ korektn∞. Uv∞domte si, ╛e
toto nenφ zßvislΘ na pou╛itΘ metod∞ (nap°. GET nebo POST).
V╣imnete si toho v╣ak pouze v p°φpad∞ GET, proto╛e po╛adavky POST
jsou obvykle skrytΘ.
P°φklad 50-2. Data k editaci u╛ivatelem <?php
echo "<textarea name=mydata>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?> |
|
Poznßmka:
Data jsou v prohlφ╛eΦi zobrazena tak, jak bylo zam²╣leno, proto╛e
prohlφ╛eΦ bude sprßvn∞ interpretovat specißlnφ symboly.
Po odeslßnφ, a╗ ji╛ pomocφ GET nebo POST, data budou zak≤dovßna
zp∙sobem urlencode pro p°enos a nßsledn∞ p°φmo dek≤dovßna v PHP.
Tak╛e v∙bec nepot°ebujete provßd∞t ╛ßdnΘ zak≤dovßnφ/dek≤dovßnφ ruΦn∞,
v╣e je provßd∞no automaticky.
P°φklad 50-3. Uvnit° URL <?php
echo "<a href=\"" . htmlspecialchars("/nexpage.php?stage=23&data=" .
urlencode($data)) . "\">\n";
?> |
|
Poznßmka:
V tomto p°φpad∞ ji╛ opravdu vytvß°φte GET po╛adavek, proto je nutnΘ
data k≤dovat ruΦn∞ pomocφ urlencode().
Poznßmka:
Musφte takΘ pou╛φt htmlspecialchars() na cel² URL,
proto╛e URL je zde hodnotou HTML atributu. V tomto p°φpad∞ prohlφ╛eΦ
nejd°φve odstranφ specißlnφ znaky a pak zpracuje URL. PHP sprßvn∞
pochopφ posφlan² URL, proto╛e jste data zak≤dovali pomocφ
urlencoded().
M∙╛ete se v╣imnout, ╛e symbol & v URL je
nahrazen &. P°esto╛e to v∞t╣ina prohlφ╛eΦ∙
opravφ. pokud na to zapomenete, nenφ to v╛dy mo╛nΘ. Tak╛e pokud
vß╣ URL nenφ dynamick², musφte pou╛φt
htmlspecialchars().
2.
Zkou╣φm pou╛φt tag <input type="image">, ale prom∞nnΘ
$foo.x a $foo.y nejsou dostupnΘ. Kde jsou?
Kdy╛ odesφlßte formulß°, lze namφsto standardnφho tlaΦφtka pou╛φt
obrßzek pomocφ tagu jako
<input type="image" src="image.gif" name="foo"> |
Kdy╛ u╛ivatel klikne n∞kde na obrßzku, p°φslu╣n² formulß° se ode╣le
na server s dv∞ma prom∞nn²mi navφc: foo.x a foo.y.
Proto╛e $foo.x a $foo.y jsou v PHP neplatnΘ nßzvy prom∞nn²ch, jsou
automaticky p°evedeny na $foo_x a $foo_y. Tzn. teΦky jsou nahrazeny
podtr╛φtky.
3. Jak vytvo°φm pole ("array") v HTML formulß°i?
Aby v²sledky odeslßnφ va╣eho formulß°e byly umφst∞ny v poli
(array), nazv∞te
elementy <input>, <select> nebo <textarea>
tφmto zp∙sobem:
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]"> |
V╣imn∞te si hranat²ch zßvorek po nßzvu prom∞nnΘ, to je to, co z toho
d∞lß pole. M∙╛ete seskupovat elementy do r∙zn²ch polφ spojenφm
stejnΘho jmΘna s r∙zn²mi elementy:
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyOtherArray[]">
<input name="MyOtherArray[]"> |
Toto produkuje dv∞ pole, MyArray a MyOtherArray, kterß budou zaslßna
PHP skriptu. Je takΘ mo╛nΘ dßt do polφ specifickΘ klφΦe:
<input name="AnotherArray[]">
<input name="AnotherArray[]">
<input name="AnotherArray[email]">
<input name="AnotherArray[phone]"> |
Pole AnotherArray bude nynφ obsahovat klφΦe 0, 1, email a phone.
Poznßmka:
Specifikace klφc∙ polφ je v HTML nepovinnΘ. Pokud klφΦe
nespecifikujete, pole bude vypln∞no podle po°adφ element∙ ve
formulß°i. Nß╣ prvnφ p°φklad obsahuje klφΦe 0, 1, 2 a 3.
Viz takΘ
Funkce pro prßci s poli a
Prom∞nnΘ z vn∞j╣ku PHP.
4.
Jak zφskßm v╣echna data z HTML elementu pro vφcenßsobn² v²b∞r?
Tag pro vφcenßsobn² v²b∞r v HTML konstruktu umo╛≥uje u╛ivatel∙m vybrat
vφce polo╛ej ze seznamu. Tyto polo╛ky se posφlajφ do handleru pro
formulß°. ProblΘm je v tom, ╛e se zpracovßvajφ pod stejn²m jmΘnem.
Nap°φklad:
<select name="var" multiple> |
Ka╛dß vybranß mo╛nost p°ijde do handleru akce jako:
var=option1
var=option2
var=option3 |
Ka╛dß volba tedy p°epφ╣e p°edchozφ obsah prom∞nnΘ $var
╪e╣enφm je pou╛φt "pole vytvo°enΘ v elementu formulß°e". M∞lo by se
pou╛φt toto:
<select name="var[]" multiple> |
V²╣e uveden² k≤d °φkß PHP, ╛e mß prom∞nnou $var
zpracovat jako pole a ka╛dΘ p°i°azenφ hodnoty do var[] znamenß p°idßnφ
prvku do pole. Prvnφ polo╛ka se tedy stane prvkem
$var[0], dal╣φ
$var[1] atd. Funkci count()
lze pou╛φt k urΦenφ, kolik mo╛nostφ bylo vybrßno, a v p°φpad∞ pot°eby
lze se°adit pole funkcφ sort().
Uv∞domte si, ╛e pokud pou╛φvßte JavaScript, m∙╛e p°idßnφ
[] do nßzvu elementu zp∙sobit problΘmy p°i pokusu
odkazovat element jeho jmΘnem. Tehdy pou╛ijte Φφselnou identifikaci
elementu, nebo nßzev prom∞nnΘ uzav°ete do apostrof∙ a pou╛ijte ho jako
indexaci do pole element∙, nap°φklad:
variable = documents.forms[0].elements['var[]']; |
| |