Pomocφ formulß°∙ m∙₧eme vytvo°it opravdu interaktivnφ aplikace, kterΘ budou zpracovßvat hodnoty zadanΘ u₧ivatelem. M∙₧eme tak nap°φklad p°ijφmat objednßvky, vzkazy od u₧ivatel∙, soubory a mnohΘ dalÜφ. Formulß°e jsou realizovßny pomocφ formulß°ov²ch tag∙ v HTML, kterΘ si nynφ vysv∞tlφme.
Pokud budeme chtφt pou₧φt (vlo₧it) formulß° do skriptu, pou₧ijeme HTML tag FORM, respektive <FORM>. Formulß° mß nßsledujφcφ atributy, kterΘ nastavφ chovßnφ formulß°e.
Musφme nastavit atribut ACTION=" << skript >> ", kter² urΦuje jmΘno skriptu, kterΘmu budou data z formulß°e p°edßny.
Poslednφm atributem, kter² bychom m∞li vyplnit je METHOD="<<POST / GET >>". Tento atribut urΦuje, jak budou data z formulß°e odeslßna. Pokud nastavφme metodu GET, budou hodnoty formulß°e p°edßny skriptu v URL adrese. Metoda GET se pou₧φvß pro p°enßÜenφ menÜφch hodnot.
Metoda POST se pou₧φvß pro p°enßÜenφ v∞tÜφch dat v t∞le HTTP po₧adavku. Ob∞ metody jsou funkΦn∞ stejnΘ, liÜφ se jen p°enosem dat.
P°φklad formulß°e:
<form action="udaje.php" method="POST"> Data formulß°e </form>
NejΦast∞ji pou₧φvan²m formulß°ov²m elementem je INPUT. P°i pou₧itφ tohoto elementu musφme jeÜt∞ nastavit atribut TYPE="<< typ >>" Nynφ si ukß₧eme, jakΘ m∙₧eme pou₧φt typy tohoto elementu.
Tento formulß°ov² prvek se pou₧φvß k Φinnostem, kdy chceme od u₧ivatele zjistit ·daje a odeslat je zp∞t skriptu.
Jako atributy m∙₧eme zadat:
Jednß se o nejzßkladn∞jÜφ vstupnφ pole, do kterΘho m∙₧eme zadßvat texty. VÜe si ukß₧eme na p°φklad∞:
<form action="jmeno_skriptu.php" method="POST"> <input type="text" name="jmeno_uzivatele"
value="Sem zadejte svΘ jmΘno" size="25"> </form>
V praxi bude formulß° vypadat nßsledovn∞:
Pokud budeme mφt vφce vstupnφch polφ, m∙₧eme je uspo°ßdat do tabulky:
<form action="registrace.php" method="post"> <table align="center"> <tr> <td>JmΘno:</td> <td><input type="text" name="jmeno"></td> </tr> <tr> <td>V∞k:</td> <td><input type="text" name="vek"></td> </tr> <tr> <td>E-mail:</td> <td><input type="text" name="email"></td> </tr> </table> </form>
V praxi tento p°φklad bude vypadat nßsledovn∞:
K Φemu by nßm byl formulß° s vstupnφmi poli, kter² bychom neum∞li skriptu odeslat. Tzn. vypln∞nΘ hodnoty p°edat skriptu, kter² je m∙₧e dßle zpracovat. Atribut TYPE="SUBMIT" nßm stanovuje, ₧e se jednß o odesφlacφ tlaΦφtko. P°i pou₧itφ tohoto formulß°ovΘho prvku bychom m∞li nastavit takΘ atribut VALUE="". Tento atribut nßm urΦuje text (nßpis), kter² bude na tlaΦφtku umφst∞n.
P°φklad odesφlacφho tlaΦφtka:
<form action="jmeno_skriptu.php" method="POST"> <input type="submit" value="Odeslat ·daje"> </form>
V praxi bude toto tlaΦφtko vypadat nßsledovn∞:
Nynφ je Φas vytvo°it si funkΦnφ p°φklad, kter² odeÜle zvolenß data z formulß°e skriptu:
<form action="data.php" method="post"> <table align="center"> <tr> <td>JmΘno:</td> <td><input type="text" name="jmeno"></td> </tr> <tr> <td>V∞k:</td> <td><input type="text" name="vek"></td> </tr> <tr> <td>E-mail:</td> <td><input type="text" name="email"></td> </tr> <tr> <td align="center" colspan="2">
<input type="submit" value="Odeslat ·daje"></td> </tr> </table> </form>
Nynφ mßme vytvo°en² formulß°, kter² po odeslßnφ p°edß hodnoty vstupnφch polφ skriptu data.php (nßzev si m∙₧ete upravit podle sebe, ale musφte upravit takΘ ACTION="..").
V p°φpad∞, ₧e atribut METHOD byl nastaven na "GET", tak budeme mφt obsah t∞chto polφ k dispozici v asocitavnφm poli $_GET["<nßzev pole>"]. Kdy₧ bude tento atribut nastaven na "POST", tak obsah t∞chto polφ bude dostupn² v asociativnφm poli $_POST["<nßzev pole>"].
V naÜem p°φpad∞ budeme mφt obsah t∞chto polφ p°φstupn² zadßnφm: $_POST["jmeno"], $_POST["vek"] a $_POST["email"].
Hodnoty formulß°ov²ch polφ b²vajφ takΘ dostupnß zadßnφm $<nazev_promenne>. Tento zp∙sob se pou₧φval d°φve a urΦit∞ na n∞j narazφte. Pro jeho pou₧itφ musφte v php.ini nastavit volbu register_globals na hodnotu On.
Vytvo°φme takΘ skript data.php, kter² nßm zpracuje data:
<? echo "JmenujeÜ se $_POST[jmeno] a mßÜ $_POST[vek] rok∙.
Vφm taky, ₧e mßÜ e-mail $_POST[email] !"; ?>
Pokud budete chtφt n∞kdy ve svΘm skriptu pou₧φt mechanizmus, kdy se u₧ivatel rozhodne, jestli ano nebo ne, m∙₧ete pou₧φt takΘ tyto "odesφlacφ tlaΦφtka".
Praktick² p°φklad:
<form action="registrace.php" method="POST"> Souhlasφte s pravidly registrace: <input type="submit" value="ANO" name="souhlas"> <input type="submit" value="NE" name="souhlas"> </form>
A skript registrace.php bude vypadat nßsledovn∞:
<? if ($_POST["souhlas"] == "ANO"){ echo "U₧ivatel souhlasφ s registracφ !!!"; }else{ echo "Bohu₧el s pravidly musφte souhlasit !!!"; } ?>
Atribut NAME="..." zajistφ, ₧e skriptu bude odeslßna prom∞nnß $souhlas, kterß bude obsahovat hodnoty ANO / NE. Podle tΘto hodnoty potom vykonßme urΦenou akci.
Toto pole, stejn∞ jako vstupnφ pole (type="text"), je urΦeno k zadßvßnφ hodnot od u₧ivatele, kterΘ nemajφ b²t zjiÜt∞ny "p°i pohledu p°es rameno". JednoduÜe °eΦeno: mφsto hodnoty (pφsmen) budou zobrazeny teΦky.
P°φklad vstupnφho pole (hesla):
<form action="jmeno_skriptu.php" metho="POST"> <input type="PASSWORD" name="heslo" size="25"
value="VaÜe heslo"> </form>
V praxi to bude vypadat nßsledovn∞:
Tento formulß°ov² prvek pou₧ijeme tehdy, pokud chceme dßt u₧ivateli na v²b∞r z n∞kolika mo₧nostφ. Nap°φklad v²b∞r pohlavφ, mobilnφho telefonu atd. U tohoto elementu m∙₧eme nastavit atribut CHECKED, kter² znamenß, ₧e tento prvek (pole) ji₧ bude vybrßn.
VÜe si ukß₧eme na p°φkladu.
<input type="radio" NAME="pohlavi" VALUE="Mu₧" CHECKED>Mu₧<br> <input type="radio" NAME="pohlavi" VALUE="Äena">Äena
V²sledek:
Mu₧V²sledek v²b∞ru mßme nßsledn∞ ulo₧en v $_POST["pohlavi"] nebo $_GET["pohlavi"].
Tento formulß°ov² prvek se pou₧φvß tehdy, pokud chcete nap°φklad dßt u₧ivateli na v²b∞r n∞kolik mo₧nostφ. Op∞t atribut NAME urΦuje nßzev, pod kter²m bude vybranΘ pole dostupnΘ skriptu. Atributem CHECKED urΦφme, ₧e toto pole ji₧ bude zaÜkrtnutΘ (fajfka ;-).
P°φklad zaÜkrtßvacφho pole:
<input type="checkbox" name="plavani" value="ano" checked>Plavßnφ <input type="checkbox" name="sport" value="ano">Sport
V praxi to bude vypadat nßsledovn∞: Plavßnφ Sport
P°φklad skriptu, kter² nßm zpracuje data:
<? if ($_POST["plavani"] == "ano") echo "MßÜ rßd plavßnφ"; if ($_POST["sport"] == "ano") echo "MßÜ rßd sport"; ?>
Tento "oblφben²" formulß°ov² prvek najde uplatn∞nφ tam, kde chcete vymazat hodnotu formulß°e, resp. formulß°ov²ch element∙. Atributem VALUE nastavφte text, kter² bude vepsßn v tomto tlaΦφtku.
P°φklad tlaΦφtka reset:
<input type="reset" value="Vymazat formulß°">
V²sledek:
P°φkladem pou₧φtφ tohoto elementu je nap°φklad p°edßnφ prom∞nn²ch z jednoho skriptu do druhΘho. VÜe si vysv∞tlφme na p°φklad∞.
P°φklad skrytΘho pole:
<form action="data.php" method="post"> <input type="hidden" name="hodnota_a" value="22"> <input type="hidden" name="hodnota_b" value="15"> <input type="submit" value="Odeslat"> </form>
P°φklad skriptu, kter² nßm zpracuje data:
<? echo "Hodnota prom∞nnΘ \$hodnota_a je $_POST[hodnota_a]"; echo "<br>Hodnota prom∞nnΘ \$hodnota_b je $_POST[hodnota_b]"; ?>
Tento formulß°ov² prvek najde uplatn∞nφ tam, kde chcete dßt u₧ivateli na v²b∞r z n∞kolika mo₧nostφ. Pokud pou₧ijete atribut MULTIPLE, u₧ivatel si m∙₧e vybrat vφce hodnot (mo₧nosti). Atribut SIZE urΦuje poΦet najednou zobrazen²ch "°ßdek" tohoto seznamu.
Polo₧ky do tohoto seznamu p°φdßvßme pomocφ: <option value="..."> value. Hodnota uvedenß za znakem "<" znamenß hodnotu, kterß bude zobrazena v seznamu - nemß ₧ßdnou vazbu s atributem value="...".
P°φklad seznamu:
<select name="vek"> <option value="15">15 <option value="20">20 <option value="25">25 <option value="30">30 </select>
V²sledek:
V asociativnφm poli $_POST["vek"] nebo $_GET["vek"] mß skript ulo₧enu zvolenou hodnotu.
P°φklad seznamu (MULTIPLE):
<select name="hobby" name="2" MULTIPLE> <option value="pocitace">PoΦφtaΦe <option value="modelareni">Modela°enφ <option value="sport">Sport <option value="hospoda">Hospoda </select>
V²sledek:
V asociativnφm poli $_POST["hobby"] nebo $_GET["hobby"] mß skript ulo₧enu zvolenou hodnotu. Vybrat vφce mo₧nostφ m∙₧eme pomocφ klßvesnice SHIFT nebo CTRL.
Pokud na sv²ch strßnkßch mßte n∞jak² guestbook (knihu vzkaz∙) "urΦit∞" se neobejdete bez tohoto formulß°ovΘho prvku. Tento element umo₧≥uje zapsßnφ n∞kolika °ßdkovΘho textu Φi dopisu. Pomocφ atributu COLS nastavujeme poΦet sloupc∙ (Üφ°ku tohoto elementu) a atribut ROWS urΦuje poΦet °ßdk∙.
P°φklad textovΘho pole:
<textarea name="vzkaz" rows="10" cols="20"> Sem m∙₧ete zadat poΦßteΦnφ hodnotu tohoto elementu. </textarea>
V²sledek:
Obsah tohoto elementu bude op∞t ulo₧en v asociativnφm poli $_POST["vzkaz"] nebo $_GET["vzkaz"]. Text m∙₧eme jeÜt∞ zpracovat - zachovat mezery, oÜet°it nebezpeΦnΘ znaky apd.
P°φklad skriptu:
<? // Pomocφ funkce AddSlashes(text) - p°evedeme znaky na jejich // HTML entity. // Pomocφ funkce NL2BR(text) - pou₧ijeme zarovnßnφ - vlo₧φ znak <BR/>. echo AddSlashes(NL2BR($_POST[vzkaz])); ?>
Pomocφ tohoto formulß°ovΘho prvku m∙₧eme odesφlat (upload) data (soubory) na server a tam je dßle zpracovßvat. M∙₧eme tak vytvo°it nap°φklad obrßzkovou galerii a mnohΘ dalÜφ aplikace. U toho pole op∞t m∙₧eme vyu₧φt atributy maxlength, size a takΘ nov² atribut accept, kter² urΦuje MIME typ soubor, jen₧ budeme moci vybrat. Pro odesφlßnφ soubor∙ musφme upravit takΘ formulß° tak, aby obsahoval atribut enctype, kter² urΦuje k≤dovßnφ odesφlan²ch dat. Pro odesφlßnφ souboru budeme pou₧φvat multipart/form-data a POST metodu odesφlßnφ dat.
Jako p°φklad si m∙₧eme uvΘst tento formulß°:
<form action="skript.php" enctype="multipart/form-data" method="post"> <input type="File" name="obrazek" accept="image/gif"> </form>
Po vybrßnφ a odeslßnφ formulß°e budeme mφt ve skriptu dostupnΘ pole $HTTP_POST_FILES, jen₧ obsahuje (jmeno_pole = nßzev formulß°ovΘho prvku pro odesφlßnφ dat):
Ve v²slednΘm PHP skriptu m∙₧eme vyu₧φt dvou funkcφ:
Na p°φklad∞ si ukß₧eme skript, kter² zkopφruje uploadovan² soubor (obrßzek "soubor.gif") na server do adresß°e "/home/soubor.gif":
<form action="skript.php" enctype="multipart/form-data" method="post"> <input type="File" name="obrazek" accept="image/gif"> </form>
<? // Skript "skript.php". if (is_uploaded_file($HTTP_POST_FILES["obrazek"])) { copy($HTTP_POST_FILES["obrazek"],"/home/soubor.gif"); } // M∙₧eme takΘ vyu₧φt funkce move_uploaded_file mφsto funkce copy. if (is_uploaded_file($HTTP_POST_FILES["obrazek"])) { move_uploaded_file($HTTP_POST_FILES["obrazek"],"/home/soubor.gif"); } ?>
Na zßv∞r bych se cht∞l jeÜt∞ zmφnit o zaΦle≥ovßnφ a vklßdßnφ skript∙. Pomocφ funkce require() nebo include() m∙₧eme do skriptu vlo₧it (zaΦlenit) nap°φklad dalÜφ soubory a zp°ehlednit si tak k≤d. Jako parametry t∞chto funkcφ se zadßvß cesta ke souboru, kter² chceme vlo₧it (zaΦlenit). Rozdφl mezi funkcφ require() a include() je v tom, ₧e funkce require() v p°φpad∞ ne·sp∞chu p°i otevφrßnφ souboru zobrazφ varovßnφ a ukonΦφ Φinnost skript, ale funkce include() zobrazφ varovßnφ a v provßd∞nφ skriptu se bude pokraΦovat.
P°φkladem m∙₧e b²t vlo₧enφ souboru "text.txt", kter² je ve stejnΘm adresß°i jako skript.
<? require("text.txt"); // nebo vyu₧itφ funkce include() include("text.txt"); ?>
Pro tento dφl to bude vÜe. V p°φÜtφm dφle si povφme o databßzφch.