Obsah lekce:
Ve formuláři z předchozí lekce chybělo tlačítko, které se postará o odeslání formuláře (tedy odešle vyplněná data na server, kde je potřeba je nějak dále zpracovat). Nyní se nacházíme ve druhém kroku zpracování formuláře a je tedy nutno implementovat funkčnost formuláře (kontrola, vyhodnocení a zpracování zadaných dat).
Úkolem této lekce bude vytvořit soubor registracni-formular.php, ve kterém bude definován formulář a po jeho odeslání se zobrazí zadané informace.
Registrační formulář dokončíme přidáním tlačítka pro odeslání dat. Na to slouží HTML element, který se zapisuje do HTML takto <input type="submit" value="odeslat formulář" /> a jedná se o ve výsledku o takovéto tlačítko: .
Stisk tohoto tlačítka způsobí následující akce:
Celý proces by se dal zjednodušeně popsat takto: "Po kliknutí na tlačítko vezmi zadané informace a předej je na vstup skriptu registracni-formular.php, který je zpracuje a vrátí HTML stránku, která je výsledkem tohoto zpracování."
V našem případě se budou data přenášet metodou GET (tedy v rámci URL prohlížeče) a předají se skriptu registracni-formular.php.
<form action="registracni-formular.php" method="get" id="registracni-formular">
<p><label for="jmeno">Jméno</label><br /><input name="jmeno" id="jmeno" type="text"></p>
<p><label for="prijmeni">Příjmení</label><br /><input name="prijmeni" id="prijmeni" type="text"></p>
<p><label for="e-mail">E-mail</label><br /><input name="e-mail" id="e-mail" type="text"></p>
<p><label for="pohlavi">Pohlaví</label><br />
<select name="pohlavi" id="pohlavi">
<option value="muz">Muž</option>
<option value="zena">Žena</option>
</select>
</p>
<p>
<label for="komentar">Kometář</label><br>
<textarea name="komentar" type="textarea" cols="30" rows="5" id="komentar"></textarea>
</p>
<p>Vyberte témata, která Vás zajímají<br>
<input name="automobily" value="Automobily" id="automobily" type="checkbox">
<label for="automobily">Automobily</label><br>
<input name="moda" value="Móda" id="moda" type="checkbox"><label for="moda">Móda</label><br>
<input name="pocitace" value="Počítače" id="pocitace" type="checkbox"><label for="pocitace">Počítače</label>
</p>
<p><input name="odeslat-formular" type="submit" value="odeslat" /></p>
</form>
Soubor registracni-formular.php je prozatím statický HMTL soubor, který obsahuje formulář. Nyní do něj přidáme kód, který se postará o získání zadaných dat a jejich zobrazení na stránce. Do našeho souboru za element <body> vložíme následující kód:
<?php
if ($_GET["odeslat-formular"]=="odeslat"){
$jmeno = $_GET["jmeno"];
$prijmeni = $_GET["prijmeni"];
$email = $_GET["email"];
$pohlavi = $_GET["pohlavi"];
$komentar = $_GET["komentar"];
print("Zadali jste jméno:".$jmeno."<br />");
print("Zadali jste příjmení:".$prijmeni."<br />");
print("Zadali jste e-mail:".$email."<br />");
print("Zadali jste pohlaví:".$pohlavi."<br />");
print("Zadali jste komentář:".$komentar."<br />");
}
?>
Pojďme si nyní skript vysvětlit. Podmínka if ($_GET["odeslat-formular"]=="odeslat"){ se ptá na otázku "Bylo stisknuto tlačítko pro odeslání formuláře?". Přesněji řečeno: "Existuje v asociativním superglobálním poli GET prvek s indexem "odeslat-formular" a hodnotou "odeslat-formular"?".
Nyní je třeba odpovědět na otázku jak se data předají z prohlížeče php skriptu. Dojde k tomu, že se ze zadaných dat vytvoří tzv. superglobální pole (Jde o předdefinovaná pole, obsahující hodnoty proměnných, získané ze serveru nebo od uživatele. Tato pole jsou automaticky globální, tedy automaticky "viditelná" v celém skriptu.) do proměnné $_GET. V našem případě tedy asociativní pole vytvořené do proměnné $_GET vypadá takto:
odeslat-formular | jmeno | prijmeni | pohlavi | ... | |
---|---|---|---|---|---|
odeslat | data vyplněná do pole formuláře s atributem name=jmeno | data vyplněná do pole formuláře s atributem name=prijmeni | data vyplněná do pole formuláře s atributem name=email | data vybraná ve formuláře v prvku select s atributem name=pohlavi | ... |
Naplněné pole po odeslání našeho formuláře může vypadat například takto:
odeslat-formular | jmeno | prijmeni | pohlavi | ... | |
---|---|---|---|---|---|
odeslat | František | Žebř | frantisek.zebr@centrum.cz | muz | ... |
Superglobální pole $_GET tedy obsahuje daný prvek jen tehdy, pokud byl ve formuláři přítomen. Pokud tedy existuje ve formuláři prvek $_GET["odeslat-formular"] s hodnotou "odeslat", pak bylo stisknuto tlačítko pro odeslání a je tedy na místě formulář zpracovat.
Pomocí Internetu zjistěte, jak zpracovat v php skriptu položky z formulářových prvků typu checkbox (a případně dalších). Formulář ke stažení zde: registracni-formular.php.
1. Rošiřte stávající formulář o zadání a zobrazení následujících údajů: ulice, číslo domu, město, PSČ, heslo pro přihlášení, nápověda pro heslo a dotaz, zda si uživatel přeje dostávat reklamní sdělení (vybere buď ano nebo ne a nepoužijete html element SELECT).
2. Pomocí Internetu zjistěte, jak lépe získat data z formuláře než prostým přiřazením $jmeno-formularoveho-elementu = $_GET["jmeno-formularoveho-elementu"];. Nápověda: Píše některým z vás formulář následující text: "Notice: Undefined index: odeslat-formular in ...\registracni-formular.php on line 12"? Proč to dělá? Dá se to nějak vyřešit?