Ondřej Šteigl - Logo ONDŘEJ ŠTEIGL
PHP

Jak v PHP zpracovat formulář (bezpečně)

Co je $_GET a $_POST, jak z formuláře přečíst odeslaná data, ověřit je a bezpečně s nimi naložit.

Čtení 8 min mírně pokročilý Naposledy upraveno 10. 10. 2026

Předtím: Kontaktní formulář v PHP

V návodu o kontaktním formuláři jsme postavili formulář, který po odeslání pošle e-mail. Teď se podíváme pod kapotu: jak PHP vlastně převezme to, co návštěvník vyplnil, jak ověřit, že data dávají smysl, a hlavně jak s nimi naložit bezpečně. Tyhle základy využijete u každého formuláře – od kontaktu přes přihlášení až po objednávku.

Dvě cesty, kudy data přijdou: $_POST a $_GET

Když návštěvník něco odešle, PHP to najde v jedné ze dvou „schránek":

Jednoduché pravidlo: něco se mění → POST, jen se něco zobrazuje nebo filtruje → GET. Formuláři řeknete, kterou cestou odeslat, atributem method:

<form method="post" action="zpracuj.php">
  <input type="text"  name="jmeno">
  <input type="email" name="email">
  <button type="submit">Odeslat</button>
</form>

Klíčové je name u každého políčka – přesně pod tímhle názvem data v PHP najdete.

Krok 1: Přečteme hodnoty

Na stránce zpracuj.php si odeslané hodnoty vytáhnete podle jejich name:

<?php
$jmeno = trim($_POST['jmeno'] ?? '');
$email = trim($_POST['email'] ?? '');
?>

Zápis ?? '' znamená „když políčko nedorazí, ber prázdný text" – ušetří vás to otravných hlášek Undefined array key. A trim() ořízne mezery na začátku a konci, které tam lidé omylem nechávají.

Krok 2: Ověříme, že data dávají smysl (validace)

Nikdy nespoléhejte na to, že člověk vyplnil všechno správně. Základ je zkontrolovat povinná pole a formát e-mailu:

<?php
$chyby = [];

if ($jmeno === '') {
    $chyby[] = 'Vyplňte prosím jméno.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $chyby[] = 'Zadejte platný e-mail.';
}

if (!$chyby) {
    // vše v pořádku → teď data zpracujeme
}
?>

Funkce filter_var() s FILTER_VALIDATE_EMAIL je vestavěná kontrola e-mailu – nemusíte vymýšlet složité vzorce. Chyby si sbíráme do pole $chyby a teprve když je prázdné, pokračujeme dál.

💡 Tip: Kontrolu dělejte vždy na straně PHP, i když máte u políčka required v HTML. HTML kontrolu lze snadno obejít – rozhoduje až to, co ověří server.

Krok 3: Bezpečnost – vstupu nikdy nevěřte

Cokoli přijde od návštěvníka, berte jako neznámý text, dokud ho neošetříte. Platí dvě věci, které znáte už z návodu o databázi:

echo 'Díky, ' . htmlspecialchars($jmeno) . '!';

A ještě jedno pravidlo: akce, která něco mění nebo maže, nikdy nemá viset na odkazu přes $_GET (např. ?smazat=5). Takový odkaz by stačilo někomu podstrčit a mohl by ho projít i vyhledávač. Mazání a změny posílejte přes POST.

Celé to spojené dohromady

Takhle vypadá kostra bezpečného zpracování formuláře – přečíst → ověřit → teprve pak zpracovat a slušně odpovědět:

<?php
$jmeno = trim($_POST['jmeno'] ?? '');
$email = trim($_POST['email'] ?? '');
$chyby = [];

if ($jmeno === '') {
    $chyby[] = 'Vyplňte jméno.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $chyby[] = 'Neplatný e-mail.';
}

if (!$chyby) {
    // … uložit do databáze nebo poslat e-mail …
    echo 'Děkujeme, ' . htmlspecialchars($jmeno) . '!';
} else {
    foreach ($chyby as $ch) {
        echo '<p>' . htmlspecialchars($ch) . '</p>';
    }
}
?>

Časté chyby

A to je celé. Teď umíte formulář nejen postavit, ale i bezpečně zpracovat – přečíst data, ověřit je a slušně odpovědět. Stejný postup použijete u přihlášení, objednávky i jakéhokoli dalšího formuláře. 👍

Všechny návody

Nechcete web řešit sami a chcete ho mít hotový a profesionální?

Podívejte se na tvorbu webů →

© Ondřej Šteigl. Autorem návodů jsem já. Obsah je autorským dílem chráněným podle zákona č. 121/2000 Sb. (autorský zákon). Kopírování, přebírání nebo šíření bez mého předchozího písemného souhlasu je zakázáno. Výukové použití je vítáno – stačí uvést zdroj (osteigl.cz).

← Zpět na všechny návody

Nezmeškejte nový návod

Když vyjde nový návod, pošleme vám krátký e-mail. Žádný spam, odhlásit se jde jedním klikem.

QR platba – dobrovolný příspěvek

☕ Byl návod užitečný?

Můžete mě podpořit dobrovolným příspěvkem – nepovinně, třeba stovkou na provoz a na kafe. Načtěte QR v bankovní aplikaci, nebo pošlete na účet 6048546800/6363. Díky!