16. Formuláře v PHP

Formuláře jsou naprostým základem webových stránek, které chcete mít interaktivní, neboli chcete, aby bylo možné pracovat s odezvou uživatele. Naprostým předpokladem je, že v tomto případě musíte mít alespoň základní znalosti HTML (XHTML) v oblasti tvorby formulářů a jejich prvků.

Formuláře a jejich parametry v HTML (XHTML)

Při vytváření jakéhokoliv formuláře HTML začínáme značkou <form>. Ta má několik dalších parametrů. Pro naše současné účely nám ovšem budou postačovat dva hlavní. Prvním je parametr action Ten určuje příjemce dat z formuláře. Pro nás to bude nějaký PHP skript, který bude schopen tyto údaje přijmout a zpracovat, popř. vypsat. O tomto parametru později. Druhým veledůležitým parametrem je parametr method Ten určuje, jakým způsobem se budou data z formuláře posílat. Zde se v praxi využívá prakticky pouze dvou metod a to je metoda post a get. Abychom mohli data z formuláře odeslat, musíme k tomu vytvořit nějaký příkaz. Používá se odesílací tlačítko, které se tvoří vložením značky <input> s parametrem type=“submit“. To zařídí, že se všechna data odešlou do námi zadaného skriptu. Typické použití formulářů vypadá asi takto:

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

Dále si zkusíme do formuláře přidat textové pole, aby bylo co odesílat:

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

Nyní si vytvoříme kompletní jednoduchou webovou stránku s formulářem:

<!DOCTYPE html>
<html lang="cs">
  <head>
    <meta charset="utf-8">
    <title>Jednoduchý formulář</title> 
</head>
<body>
      <form action="vypis_dat.php" method="post">
      Zadej svoje jméno: <input type="text" name="jmeno"><br />
      <input type="submit" value="Odeslat data formuláře" />
      </form>
</body>
</html>

Jak můžete z kódu vypozorovat, data mají být zpracovány souborem vypis_dat.php. Ten ovšem do této chvíle neexistuje. Proto si jej vytvoříme:

<!DOCTYPE html>
<html lang="cs">
<head>
    <meta charset="utf-8">
    <title>Zpracovaná data z formuláře</title>
</head>
<body>
      <?php
            $jmeno = $_POST['jmeno'];
            echo 'Vaše jméno je ', $jmeno;
      ?>
</body>
</html>

Aby se vám skutečně data z formuláře vypsaly, musí se tento soubor nacházet ve stejné složce jako je ten, ze kterého data odesíláte (pokud tedy nemáte zadanou jinou cestu k souboru, což v našem případě nemáme). Ještě se zaměříme na předešlý kód. První řádek v PHP kódu je deklarace proměnné  $jmeno, ke které je přiřazen záznam z odeslaného formuláře a to konkrétně s názvem jmeno. Jak vidíte je zde i zmíněna právě metoda zasílaných dat - $_POST. Pokud tedy odesíláte jednou metodou, nemůžete pro zpracování použít druhou metodu. Dnes se prakticky v 99% pracuje s metodou POST. Rozdíly odesílacích metod:

Metoda GET Metoda POST
Neumí odeslat rozsáhlá data Umí odesílat rozsáhlá data
Odesílá data jako součást adresy URL Odesílá data jinou cestou, než je adresa URL

Formuláře s podmínkou

První příklad je zaměřen na formulář, u kterého přijímací skript ověřuje podmínku – zadání správného hesla. Nejprve tedy stránka s formulářem, do kterého musí uživatel napsat správné heslo:

<!DOCTYPE html>
<html lang="cs">
  <head>
    <meta charset="utf-8">
    <title>Zadej prosím heslo</title> 
</head>
<body>
 <h2>Pokud se chceš dozvědět podrobnosti o srazu, musíš zadat správné heslo</h2>
  <form action="vysledek.php" method="post">
   Zadej heslo: <input type="password" name="heslo"><br>
   <input type="submit" value="Odeslat heslo">
  </form>
</body>
</html>

Po spuštění se vyhodnocuje odeslaný výraz z formuláře v souboru vysledek.php takto:

<!DOCTYPE html>
<html lang="cs">
  <head>
    <meta charset="utf-8">
    <title>Informace o srazu</title> 
</head>
<body>
  <?php
    if ($_POST['heslo'] == 'lokomotiva')
     echo 'Sraz se bude konat zítra ve 3 hodiny u Tygra';
    else
     echo 'Bohužel zadal jsi špatné heslo, nic se nedozvíš';
?>
</body>
</html>

Skript je doplněn o podmínku if. Správné heslo je „lokomotiva“. Pokud jej tedy uživatel nezadá, nezobrazí se mu požadovaný text. Pokuste se doplnit podmínku o další prvek, který je nutno správně do formuláře zadat. Doplňte stránku frameworkem Bootstrap.