Anglická verze
logolink

< Zpět na seznam lekcí

PHP a formuláře II

PHPObsah lekce:

  • Registrační formulář
  • Získání dat z registračního formuláře
  • Praktický úkol
  • Domácí úkol

Registrační formulář

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.

Dokončení registračního formuláře

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:

  1. Shromáždí zadaná data z formuláře.
  2. Data pošle přes http protokol webserveru (jak přesně bude přenos probíhat záleží na zvolené metodě GET/POST).
  3. Přenesená data předá php skriptu specifikovanému v atributu action, který se spustí a jím vygenerovaná stránka se nám zobrazí v prohlížeči.

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.

HTML kód registračního formuláře

HTML kód formuláře

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

Výsledná podoba registračního formuláře v prohlížeči






Vyberte témata, která Vás zajímají


Získání dat z formuláře

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:

Získání dat z formuláře zaslaných metodou GET

<?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 email 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 email 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.

Praktický úkol

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.

Domácí úkol

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?

Další čtení

Odkazy

Otázky

  1. Jaká značka (tag) se používá pro odeslání formuláře?
  2. K čemu slouží ve formuláři atribut action?
  3. Co se stane při stisku tlačítka pro odeslání formuláře?
  4. Jak získat zaslaná data formulářem v php skriptu?
  5. Jaký je rozdíl při zpracování dat poslaných formulářem metodou GET resp. POST v php skriptu?
webdesign, xhtml, css, php - Mgr. Michal Mikláš