PHP (24) - Pracujeme s formuláři
PHP umí zpracovat data z formulářů. Je to často používané a jednoduché, takže se to pojďme naučit.
14.7.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 126846×
Internet je interaktivní záležitost. To znamená, že uživatel může
nějaká data nejen od serveru požadovat, ale také je na server může
poslat. K tomu slouží v HTML formuláře - a PHP je potom na straně
serveru umí zpracovat.
Trocha teorie
Formulářům bude zanedlouho věnován díl sesterského seriálu
věnujícímu se HTML obecně, takže k teorii jen stručně. Klasický
formulář obsahuje nějaké prvky pro uživatelský vstup (třebas textová
pole) a nějaké prvky pro jeho odeslání. Hodně jednoduchý formulář by
tedy mohl
vypadat nějak takto:
<form>
Příjmení: <input> <input type="Submit">
</form>
A jedním dechem dodejme, že pro účely zpracování v PHP je to
nepostačující. Abychom mohli formulář zpracovat pomocí PHP, měl by
splňovat dvě zásady:
- měl by mít specifikován v tagu <form> atributy method a
action
- ovládací prvky (jako jsou například textová pole) by měly mít
specifikovány svůj název.
Takže o něco "správnější" formulář pro účely zpracování PHP by mohl
vypadat například takhle:
<form method="get"
action="zpracuj.php">
Příjmení: <input name="prijmeni"> <input
type="Submit" name="odesli">
</form>
Tolik tedy lehce k definiční části formuláře. V PHP nás ale bude
zajímat především jeho zpracování.
Zpracování formuláře
Jelikož je PHP jazyk spouštěný na serveru, zpracovává se formulář
pochopitelně také na serveru. V našem případě by tedy na serveru musel
existovat soubor zpracuj.php, který by zadané údaje nějak vyhodnotil.
Tím vyhodnocením může být prakticky jakákoli myslitelná akce. Skript
může zadané údaje zapsat do souboru nebo do databáze, může je použít
pro vrácení nějakých údajů z databáze nebo jiného serveru, může pomocí
nich ověřit
uživatele a tak dále. Prakticky jakýkoli seriál o formulářích ale
začíná
ukázkou, jak zaslaná data prostě jen vypsat do prohlížeče.
Tomu zůstaneme věrni i my. V našem skriptu zpracuj.php si ukážeme,
jak vypsat do prohlížeče příjmení, zadané v textovém poli při zobrazení
formuláře. Ještě jedna poznámka: teď budeme předpokládat, že existují
dva soubory - jeden bude obsahovat formulář
(viz výše) a druhý bude zpracovávat formulář.
Tedy, skript pro zpracování formuláře zpracuj.php může vypadat nějak
takto:
<?
echo "Právě mi přišel formulář. Uživatel tam jistě zadal
nějaké příjmení!<BR>\n";
echo "Á, je to <B>".$_REQUEST["prijmeni"]."</B>";
?>
Spustit skript
Z příkladu vidíme, že PHP obsahuje asociativní
pole $_REQUEST[],
které obsahuje zaslaná data a zachází s nimi, jako by to byly klasické
proměnné. Kdyby bylo proměnných více, bylo by více i prvků pole
$_REQUEST. Abychom byli úplně přesní, dodejme, že už teď má pole
$_REQUEST dva prvky. O čemž se nevěřící Tomášové mohou přesvědčit
skriptem ve stylu:
<?
foreach ($_REQUEST as $pole)
{
echo $pole."<BR>\n";
}
?>
Zkrátka: Ovládací prvek pro odeslání má také svoji hodnotu (je to
jeho popisek) a název (odesli), takže se pole $_REQUEST bude i v našem
jednoduchém případě skládat ze dvou prvků. Polužití pole $_REQUEST ná
přivádí ještě k jedné důležité odbočce do teorie zpracování formulářů,
a tou je
GET a POST
Obecně vzato lze formuláře odesílat jak pomocí metody GET (tak jsme
to dělali v našem příkladu), tak i pomocí metody POST. K tomu je dobré
uvědomit si následující věci:
- metodu odesílání stanovujeme v úvodním tagu <FORM> pomocí
atributu method. Když atribut vynecháme, použije se GET
- pokud skript zpracovává formulář, je v asociativním poli
$_REQUEST obsah proměnných při použití kterékoli z obou metod
- metody GET a POST jsou rozdílné a každá se hodí na něco jiného
Metoda GET posílá data z formuláře jako součást URL. Neboli, data se
objeví v poli Adresa Vašeho prohlížeče. Z toho vyplývá, že se tento
postup hodí dobře pro data, která jsou krátká a u kterých nevadí, když
si je někdo přečte. Mějte rovněž na paměti, že když si data může někdo
přečíst, může je taky změnit. Takový člověk pak může udělat "formulář
sám ze sebe" a poslat ke zpracování data, která vůbec nebyla vytvořena
odesláním zdrojového formuláře, ale byla zadána třebas jako součást
adresy do prohlížeče.
Naproti tomu POST nepřidává data do URL, ale odesílá je jako
samostatný HTTP objekt. Z toho vyplývá jednak to, že odesílaná data
mohou být podstatně delší než u GET, a jednak to, že je odesílatel
nemůže tak snadno změnit například vhodným zásahem do adresy.
Pozn.: Ale může je změnit zásahem
do komunikace mezi serverem a klientem. Takže, metoda POST je jen o
něco bezpečnější než GET.
Kterou metodu vybrat je otázka pro programátora. Pro jemnější
rozlišení jsou v
PHP kromě pole $_REQUEST rovněž pole $_GET a $_POST, která se naplní
proměnnými v případě, že formulář byl odeslán metodou GET nebo POST.
Což se hodí v případě, kdy budete chtít mezi těmito metodami rozlišovat.
A já sám, vždycky sám...
V úvodu jsem prohlásil, že jeden soubor obsahuje samotný formulář a
druhý soubor jej zpracovává. To nemusí být vždycky pravda. Lze napsat
skript, který bude formulář jak obsahovat, tak taky zpracovávat. Což
může mít výhody a nevýhody. Výhodou může být jednoduchost - místo dvou
souborů je jen jeden. Nevýhoda je ta, že si tím trochu svazujeme ruce -
je obtížnější zpracovávat dva formuláře jedním skriptem a definice
formuláře musí být v souboru php, ne htm.
Situace, kdy je v jednom souboru formulář i jeho zpracování, se ale
používá docela často. Docela zajímavý problém je pak ten, jak má nebohý
skript poznat, jestli po něm chceme: a) zobrazit formulář a zadat
hodnoty, nebo b) už se zadávalo a on by měl zpracovat výsledky.
Ukážu Vám dva způsoby, jak to udělat a použiji přitom náš formulář
výše. Takže, první způsob:
<?
if (!$_REQUEST["UzJsemToOdeslal"])
{
?>
<form method="get" action="25_jeden.php">
Příjmení: <input name="prijmeni">
<input type="hidden" name="UzJsemToOdeslal"
value="1">
<input type="Submit" name="odesli">
</form>
<?
}
else
{
echo "Mám tě, odeslaný
formuláři! Tys vyplnil ".$_REQUEST["prijmeni"];
}
?>
Spustit skript
Spočívá to v tom, že vytvoříme skryté pole (hidden) formuláře, které
sice uživatel neuvidí, ale skript sám jej obdrží jakožto jeden z prvků
pole $_REQUEST. A pokud ho neobdrží, znamená to, že formulář ještě
nebyl odeslán a měl by se tedy zobrazit, ne zpracovat. Je zajímavé, že
to používá většina lidí.
Druhá metoda spočívá v tom, že vůbec nebudeme zavádět žádná další
skrytá pole formuláře, ale prozkoumáme PHP pole $_REQUEST. Je jasné, že
když bude toto pole prázdné, formulář jsme ještě neodeslali. Může to
vypadat nějak takhle:
<?
if (empty ($_REQUEST))
{
?>
<form method="get" action="source.php">
Příjmení: <input name="prijmeni">
<input type="Submit" name="odesli">
</form>
<?
}
else
{
echo "Mám tě, odeslaný
formuláři! Tys vyplnil ".$_REQUEST["prijmeni"];
}
?>
Co z toho použijete je pochopitelně jen na Vás. Přijde mi ale dobré
využívat možnosti jazyka, když už jsou tak bohaté. Příště si ukážeme,
jak data z formulářů ověřovat.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|