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