Kurz PHP (7.)

Formulß°e

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.

Vstupnφ pole <INPUT TYPE="TEXT" NAME="...">

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∞:

JmΘno:
V∞k:
E-mail:

Odesφlßnφ formulß°e <INPUT TYPE="SUBMIT" VALUE="...">

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.


Vstupnφ pole (heslo) <INPUT TYPE="PASSWORD" VALUE="...">

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∞:


P°epφnacφ pole (tlaΦφtka) <INPUT TYPE="RADIO" VALUE="...">

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₧
Äena

V²sledek v²b∞ru mßme nßsledn∞ ulo₧en v $_POST["pohlavi"] nebo $_GET["pohlavi"].



ZaÜkrtßvacφ pole <INPUT TYPE="CHECKBOX" NAME="...">

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";
?>

Pole reset <INPUT TYPE="RESET" VALUE="...">

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:


SkrytΘ pole <INPUT TYPE="HIDDEN" NAME="..." VALUE="...">

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]";
?>

Seznam <SELECT NAME=".."> </SELECT>

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.


TextovΘ pole (vφce°ßdkovΘ) <TEXTAREA> </TEXTAREA>

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]));
?>

Pole pro odeslßnφ soubor∙ <INPUT TYPE="FILE" >

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φ:

  1. copy(soubor, cesta) - Tato funkce p°esune (zkopφruje) soubor do zvolenΘho adresß°e - cesta.
  2. move_uploaded_file(soubor, cesta) - Tato funkce takΘ p°esune (zkopφruje) soubor do zvolenΘho adresß°e - cesta.
  3. is_uploaded_file - vrßti boolean hodnotu TRUE, pokud byl soubor ·sp∞Ün∞ ulo₧en na server.

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");
}


?>

Funkce require() a include()

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.

Petr Rympler