PHP - 10. díl – formuláře

Dnešní díl PHP bude věnován oblasti formulářů, tedy zadávání dat od čtenářů a návštěvníků stránek.

Formuláře - úvod

Formuláře slouží k zadávání dat uživatelem webových stránek. Samo o sobě formuláře nejsou součástí PHP, ale už HTML jazyka. V samotném HTML jazyce existují prvky, které slouží pro zadávání dat a posílání těchto dat jiným stránkám, nebo skriptům. Nutno říci, že mnoho lidí ve formulářích tápe, i když jinak třeba umějí zbylé části HTML excelentně. Proto dnes učiním výjimku, a částečně formuláře vysvětlím, ač se to spíše týká HTML. Upozorňuji, že se budu soustředit spíše na použití formulářů v PHP skriptech, a proto některé věci mírně zjednoduším.

Značka <form>

Jednouše vzato, formulář je vše, co je v HTML mezi tagy <form> a </form>. Jedna HTML stránka může obsahovat jeden, žádný, nebo libovolně mnoho formulářů na jedné stránce. Protože formulář slouží k posílání dat, má značka <form> několik atributů, které slouží právě k určení, kam se data z formuláře mají poslat, a jakým způsobem.

Značka <form> v obecném pojetí může mít atributy action, který určuje kam se budou data posílat. Dalším atributem je method, který určuje jakým způsobem se budou data posílat. Existují ještě některé další atributy, ale ty už pro dnešní vysvětlování nebudou podstatné. Typické použití formuláře je například takovéto:

<form action="mujskript.php" method="post">
<!-- datové položky formuláře -->
</form>

Jak je vidět, za atribut action se dosazuje adresa PHP skriptu, který přijme zaslaná data. Jako hodnotu atributu method se dosazuje nejčastěji get, nebo post. Rozdíl mezi get a post je ve způsobu zaslání dat. Metoda get zašle data jako součást adresy webové stránky, zatímco metoda post zašle data odděleně, takže nejsou vidět v adrese webové stránky. Metoda post je schopná zpracovat v principu rozsáhlejší data, a pokud nevíte, doporučuji používat spíše post.

Akce submit - odeslání dat formuláře

Data z formuláře se odesílají speciální akcí, která se hodně spojuje s anglickým slovem submit. Asi nejjednodušším způsobem je umístit tlačítko typu "submit" do formuláře. Vyzkoušejte si třeba následující kus HTML kódu:

<form action="mujskript.php" method="post">
<!-- datové položky formuláře -->
<input type="submit" value="Odeslat data formuláře">
</form>

Pokud si zkusíte zobrazit tento kód zjistíte, že se vám objeví tlačítko s nápisem "Odeslat data formuláře" a po kliknutí na tlačítko dostanete nejspíše chybovou zprávu prohlížeče. Po kliknutí na tlačítko se totiž formulář pokusil odeslat data skriptu, který je zapsán v atributu action u značky <form>. To je u nás skript s názvem "mujskript.php", který zatím nemáme, takže pokus o odeslání dat formuláře skriptu skončil chybou.

Přidáváme datové údaje

Zatím jsem použil jenom prázdný formulář, který má prázdná, tedy žádná data. Data se přidávají za značku <form> speciálními HTML značkami, jako jsou třeba značky <input>, <select>, <textarea> a další. Zkusme třeba přidat jednoduché políčko, do kterého napíšeme text (uložte si následující příklad do souboru form1.html):

<form action="mujskript.php" method="post">
Zadej jméno: <input type="text" name="jmeno"><br>
<input type="submit" value="Odeslat data formuláře">
</form>

Po spuštění výše uvedeného HTML kódu by se měla objevit i kolonka na zadání jména. Pod tím je stále tlačítko na odeslání dat formuláře, ale protože nemáme náš skript, odeslání skončí chybou, pokud klikneme na toto tlačítko.

Přijímáme data formuláře

Jak je vidět, formuláře tedy potřebují dva skripty, jeden, který obsahuje data formuláře, a druhý, který odeslaná data přijme.

Zkusme si nechat výše uvedený poslední příklad HTML kódu s formulářem a jednou kolonkou na jméno a zkusme k němu napsat PHP skript, který by data přijmul a zpracoval. Takový PHP skript může být velmi jednoduchý (je potřeba ho uložit jako soubor mujskript.php):

<html>
<head>
<title>Příklad 4. z 10. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $jmeno = $_POST["jmeno"];
  echo "Vaše jméno je: ", $jmeno
?>
</body>
</html>

Pro vyzkoušení příkladu spusťte form1.html, tedy předchozí příklad na formulář. Zadejte do kolonky nějaké jméno a klikněte na tlačítko "Odeslat data formuláře". Dojde k tomu, že se sám nahraje náš skript s názvem mujskript.php a předají se mu data. Jméno, které jste zadali do kolonky pak skript vypíše.

Celý příklad obsahuje pouhé dvě řádky PHP kódu. Na první řádce přijme jako data hodnotu kolonky s názvem jmeno (zadali jsme jí ve formuláři jako name="jmeno" ve značce <input>) a uloží jméno do proměnné $jmeno.

$jmeno = $_POST["jmeno"];

Používám zde pole s názvem $_POST, protože jsem data předával metodou post (viz atribut method ve značce <form>), pokud bych předával metodou get, použil bych namísto toho pole s názvem $_GET.

Na druhé řádce prostě jméno jenom vypisuji pomocí příkazu echo.

Další příklad - zadejte správné heslo

Pomocí formulářů jde udělat velmi mnoho věcí, protože dovolují reagovat na to, co zadá uživatel. Jedna z možností je kontrola, zda zadal správné heslo:

Vlastní formulář bude vypadat takto (uložte ho do souboru vlozheslo.html):

<form action="prijmiheslo.php" method="post">
Zadej heslo pro vstup: <input type="password" name="heslo"><br>
<input type="submit" value="Odeslat heslo">
</form>

PHP skript, který přijímá data bude vypadat takto (uložte ho do souboru s názvem prijmiheslo.php):

<html>
<head>
<title>Příklad 6. z 10. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $heslo = $_POST["heslo"];
  if ($heslo == "lokomotiva")
    echo "<h1>Heslo je správně!</h1>";
  else
    echo "<h1>Heslo není správně</h1>";
?>
<a href="vlozheslo.html">Klikni sem a zkus to znovu</a>
</body>
</html>

Pro zkoušení je třeba nastartovat stránku vlozheslo.html a zadat heslo. Správné heslo je lokomotiva, pokud zadáme jiné bude to brát jako špatné heslo.

Ve formuláři máme jedinou kolonku, a to s názvem heslo (name="heslo" ve značce <input>). Tato kolonka se při kliknutí na tlačítko "Odeslat heslo" pošle našemu skriptu s nazvem prijmiheslo.php. Ten nejdříve zjistí v poli $_POST jaké že jsme to zadali heslo. Potom heslo porovná s řetězcem "lokomotiva" a pokud jsou shodné, vypíše, že heslo je správně. V opačném případě vypíše, že heslo je špatně. Pod tím vším je odkaz, kde je to možné zkusit znovu.

Jednoduchá kalkulačka na sčítání

Jako další příklad uvedu jednoduchou kalkulačku, která umí sečíst dvě čísla, která napíšete do kolonky. V tomto příkladu budeme pracovat s formulářem už se dvěma kolonkami.

Takže vzhůru na to, následující příklad si uložte do souboru s názvem kalkulačka.html:

<form action="pocitej.php" method="post">
Zadej první číslo: <input type="text" name="prvni"><br>
Zadej druhé číslo: <input type="text" name="druhe"><br>
<input type="submit" value="Spočítej součet">
</form>

A přijímací skript, který uložte do souboru pocitej.php:

<html>
<head>
<title>Příklad 8. z 10. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $prvni = $_POST["prvni"];
  $druhe = $_POST["druhe"];
  $vysledek = $prvni + $druhe;
  echo $prvni, " + ", $druhe, " = ", $vysledek;
?>
<br>
<a href="kalkulacka.html">Zadej další příklad</a>
</body>
</html>

Pro vyzkoušení příkladu je potřeba spustit nejdříve soubor kalkulacka.html a druhý skript s názvem pocitej.php pak dostane automaticky data po kliknutí na tlačítko "Spočítej součet".

Diskuze (20) Další článek: Odborníci varují před aktuálními chybami v zabezpečení

Témata článku: , , , , , , , , , , , , , , , , , , ,