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:

<html>
<head>
<title>Jednoduchý formulář</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</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:

<html>
<head>
<title>Zpracovaná data z formuláře</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>

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:

<html>
<head>
<title>Zadej prosím heslo</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</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:

<html>
<head>
<title>Informace o srazu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</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.