Formuláře
Prvním krokem webové aplikace je obvykle (ale ne vždy) shromažďování nějakého druhu dat o uživateli. To se provádí typicky pomocí formuláře HTML. Uživatel zadá informace do některých polí formuláře a stiskne tlačítko Odeslat. Prohlížeč zformátuje data a odešle výsledek webovému serveru.
<html>
<form>
Zadejte prosím vaše jméno:
<input type="text" name="uzivatel">
<input type="submit" value="Odeslat">
</form>
<br>
<?php
if (isset($_REQUEST['uzivatel'])) {
echo 'Napsali jste: ', $_REQUEST['uzivatel'];
}
?>
</html>
Spusťte stránku, napište vaše jméno a stisknete tlačítko Odeslat. Všimněte si několika věcí. Když je stránka načtena poprvé a tudíž nic nebylo zadáno do textového pole, proměnná $_REQUEST['uzivatel'] není inicializována a nevypíše se žádné jméno. Když zadáte jméno a stisknete tlačítko, obdržíte očekávanou zprávu (jako "Napsali jste: Martin" v předchozím příkladu). Textové pole bude po odeslání samozřejmě prázdné, takže jméno nebude korespondovat s aktuální hodnotou pole. Jinými slovy, naše proměnná není o jeden krok synchronizována.
Druhou věcí, které byste si měli všimnout, je to, že se zadaný text při odeslání stránky přidal k URL (webová adresa). Pokud se stránka bude jmenovat index.php a stisknete tlačítko pro odeslání, změní se na index.php?uzivatel=Martin. Abychom porozuměli tomu, co se děje, musíme se podívat podrobněji na spolupráci prohlížečů s webovým serverem.
Aby webový server provedl nějakou akci a spustil skript na serveru, je potřeba, aby webový prohlížeč zabalil vyplněná data o uživateli a odeslal požadavek webovému (HTTP) serveru. Požadavek HTTP se skládá z URL dané stránky nebo skriptu, dat formuláře (pokud byla nějaká zadána) a dalších informací (informace o prohlížeči, délka a druh požadavku). Požadavek je generován typicky prohlížečem, ale je důležité pochopit, jak je vytvářen a používán. Každý požadavek musí určovat, která metoda požadavku se použije. Můžete ji určit atributem method v HTML značce form, např.:
<form method="POST">
Nejčastěji používanými metodami jsou HEAD, GET a POST. Metoda HEAD jednoduše získává informace o dokumentu a nikoliv samotný dokument. Metody GET a POST jsou těmi, které se používají pro odeslání požadavku ke spuštění webového programu. Ačkoliv obě dělají totéž, způsob provedení se trochu liší.
Metoda GET
Když odesíláte požadavek GET, jsou všechna zadaná data formuláře přidána k řetězci požadavku. Data jsou předána v párech klíč=hodnota (viz. tabulka níže). Například požadavek, který vypadá takto:
http://www.server.cz/php/formular.php?uzivatel=Martin
... by spustil skript s názvem formular.php v adresáři /php/ na serveru www.server.cz a předal by mu hodnotu "Martin" v klíči uzivatel.
| Prvek | Popis |
| http://www.server.cz | Webový server, který má požadavek zpracovat |
| /php/formular.php | Název a umístění skriptu na serveru |
| ? | Odděluje umístění skriptu od dat |
| klíč=hodnota | Názvy polí a přiřazené hodnoty formuláře |
| & | Oddělení jednotlivých dvojic klíč=hodnota |
| + | Nahrazuje mezeru. Všechny ostatní speciální znaky jsou překódovány na hexadecimální čísla. |
GET se používá jako výchozí metoda všech webových požadavků. Když uživatel vytvoří jednoduchý požadavek na webovou stránku, prohlížeč jej odešle jako požadavek GET. Jelikož požadavek GET zahrnuje všechna data formuláře do řetězce požadavku, prohlížeč jej zobrazí jako každé jiné URL. Pokud jsou v mezipaměti prohlížeče předchozí výsledky pro přesně stejné URL, mohly by se zobrazit starší výsledky. Jednoduše řečeno, prohlížeč vytáhne stránku z mezipaměti na pevném disku místo toho, aby načetl aktuální data z webového serveru. Dalším potenciálním problémem metody GET je omezení množství dat, protože se připojují za URL požadavku.
Metoda POST
Požadavky, které využívají metodu POST, zahrnují data formuláře jako součást těla požadavku. Data tedy nejsou vidět v URL. Program serveru bude moci načíst obsah vstupního souboru a analyzovat názvy a hodnoty proměnných. Metoda POST umožňuje předání většího množství dat a pokaždé odešle požadavek serveru (místo hledání v mezipaměti prohlížeče). Výsledkem POST metody nemusí být jen předání dat serverovému programu, ale také posílání libovolných souborů, mailů atd. Posílaná data nejsou nijak omezená a je možné v hlavičkách tělo požadavku popsat.
Kterou metodu použít?
Ve většině případů nebude záležet na tom, jakou metodu použijete pro odeslání požadavku webovému serveru. Ideálně by se měl požadavek GET používat pro získání informací, tedy pomocí modifikovaného URL, které odesílá serveru. Požadavek POST by se měl používat pro požadavky, které budou měnit obsah dat uložených na serveru. Kromě tohoto rozdělení by se měla metoda GET používat pro jednoduché vyhledávání v databázi a metoda POST pro program závislý na času.
Poznámka: Jak jste si asi už všimli, PHP automaticky vytvoří pro každý klíč v požadavku prvek v poli $_REQUEST[], například $_REQUEST['uzivatel']. Chcete-li z nějakého důvodu rozlišit, zda byla hodnota odeslána metodou GET nebo POST, můžete použít pole $_GET[] a $_POST[].
Vrácení výsledků prohlížeči
Po zpracování požadavku je posledním krokem webové aplikace vytvoření nějakého druhu odpovědi na požadavek a její vrácení prohlížeči. Obecně řečeno, skript serveru určuje druh obsahu a pak zapíše odpověď do výstupního datového proudu. Když webový prohlížeč obdrží odpověď, podívá se nejprve do hlaviček odpovědi a určí druh MIME, aby věděl, jak zpracovat data. Nejčastějším druhem vráceného obsahu je "text/html" (HTML stránka), ale server může vrátit cokoliv, XML, neformátovaný text, obrázek nebo třeba zvuk...
Zpracování dat z formuláře
V příkladu výše jsme používali pro odeslání a zpracování dat z formuláře HTML stejnou stránku PHP. Ačkoliv se to pro ilustraci hodilo, někdy je nezbytné zpracovat data uživatele v jiném skriptu. Abychom si ukázali, jak to funguje, vytvoříme si novou aplikaci a použijeme k tomu dvě stránky - vstup.html, kde bude pouze HTML formulář a zpracuj.php, kde budeme zpracovávat přijatá data z formuláře. Atribut action v HTML tagu form bude nastaven na zpracuj.php, tím požadavek odešleme na námi požadovanou stránku.
Zdrojový kód souboru vstup.html:
<html>
<form action="zpracuj.php" method="GET">
Prosím, zadejte vaše jméno:
<input type="text" name="uzivatel">
<input type="submit" name="odeslat" value="odeslat">
</form>
</html>
Zdrojový kód souboru zpracuj.php:
<html>
<?php
if (isset($_REQUEST['uzivatel'])) {
if ($_REQUEST['uzivatel'] !== '') {
echo 'Uživatel ', $_REQUEST['uzivatel'], ' je na našem webu vždy vítán!', "\r\n";
}
else {
echo 'Vy se nijak nejmenujete?', "\r\n";
}
}
?>
</html>
Jak jsme si řekli, atribut action tagu form určuje URL skriptu, který bude zpracovávat data z formuláře, v našem případě zpracuj.php. Jelikož není uvedena úplná cesta, musí být soubor zpracuj.php umístěn ve stejném adresáři jako soubor vstup.html. Když uživatel klikne na tlačítko Odeslat, prohlížeč nejprve rozdělí data z formuláře do dvojic klíč=hodnota. Dvojice klíč=hodnota není nic jiného než název prvku input a jeho hodnota. V HTML jsou to atributy name a value. Výše uvedený příklad obsahuje dva takové prvky input: textový prvek uzivatel a odesílací prvek odeslat. Pokud do textového prvku zadáte jméno "Alenka", bude jeho hodnota právě "Alenka". Hodnota prvku odeslat byla podle atributu value nastavena na "odeslat". Prohlížeč před odesláním dat na webový server zakóduje páry klíč=hodnota. Kódování URL je způsobem jednotného předávání dat jako jediného řetězce. Výsledkem tedy bude například URL:
zpracuj.php?uzivatel=Alenka&odeslat=odeslat
Podrobněji to probereme později.
Jelikož je webový server nastaven tak, aby rozpoznával soubory *.php, zpracuj.php se provede jako skript PHP. PHP automaticky dekóduje data zakódovaná do URL a uloží každou dvojici klíč=hodnota jako proměnnou s odpovídajícím názvem do polí $_REQUEST[] (vždy), $_GET[] (pro požadavek metodou GET), nebo $_POST[] (pro požadavek metodou POST) a svou hodnotou. Ve skriptu zpracuj.php je automaticky vytvořena proměnná $_REQUEST['uzivatel'], která bude obsahovat hodnotu "Alenka". Další proměnná, $_REQUEST['odeslat'], bude obsahovat hodnotu "odeslat". Proto není potřeba v našem skriptu tyto proměnné vytvářet nebo inicializovat. Prostě je můžeme rovnou začít používat. Všimněte si, že naše aplikace se provede pouze v případě, že požadavek obsahuje prvek uzivatel. Pokud ano, ještě zkontroluje, zda není prázdný a případně uživatele přivítá.