Lekce 5 - Asociativní pole v PHP a obsluha formulářů
V předešlém cvičení, Řešené úlohy k 1.-4. lekci PHP, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
Dnes si v PHP tutoriálu rozšíříme znalosti ohledně polí a hned je prakticky využijeme k vytvoření webové kalkulačky. Ano, konečně budeme reagovat na nějaký vstup od uživatele
Asociativní pole
Druhý typ polí v PHP je tzv. pole asociativní. Funguje úplně stejně, jako číselně indexované, ale indexy již nejsou čísla, ale textové řetězce. Indexům v tomto typu polí říkáme klíče.
Asociativní pole definujeme podobně jako číselně indexované, jen kromě
hodnot zadáváme i klíče. K tomu používáme operátor dvojité šipky
(=>
):
$oblibeneVeci = array( 'homer' => 'kobliha', 'marge' => 'trouba', 'bart' => 'prak', 'liza' => 'kniha', 'maggie' => 'dudlík', );
Zápis pole jsme rozdělili kvůli přehlednosti do více řádků, ale šlo
by to i v jednom. V poli máme 5 hodnot: 'kobliha'
,
'trouba'
, 'prak'
,
'kniha'
, 'dudlík'
. Každá hodnota
patří nějakému klíči ('homer'
, 'marge'
,
'bart'
, 'liza'
, 'maggie'
). Hodnoty
přiřadíme ke klíči pomocí šipky a oddělujeme čárkou, která se
většinou píše i za poslední položkou. Nezapomenete ji tak napsat až do
pole budete přidávat další prvek.
Mimochodem, všimněte si, že pokud vytváříme proměnnou, jejíž název zahrnuje více slov, použijeme tzv. velbloudí notaci. První písmeno malé a každé počáteční písmeno dalšího slova velké. Lidé v PHP píší různě, ale tato konvence je bezesporu nejlepší.
Pro práci s asociativním polem platí to samé, jako jsme si ukazovali minule u pole číselně indexovaného:
{PHP}
$oblibeneVeci = array(
'homer' => 'kobliha',
'marge' => 'trouba',
'bart' => 'prak',
'liza' => 'kniha',
'maggie' => 'dudlík',
);
echo('Homer má rád: ' . $oblibeneVeci['homer']);
{/PHP}
Místo abychom napsali $oblibeneVeci[0]
, použijeme textový
klíč. Obrovskou výhodou je přehlednost. Vidíme, co z pole vytahujeme, na
rozdíl od číselného indexu, který nám mnohdy nic neříká.
Každé číselně indexované pole lze zapsat jako pole asociativní a to takto:
{PHP}
$batoh = array('provaz', 'svítilna', 'peněženka');
$batoh2 = array(
0 => 'provaz',
1 => 'svítilna',
2 => 'peněženka',
);
print_r($batoh);
print_r($batoh2);
{/PHP}
Z výpisu vidíme, že pole $batoh
a $batoh2
jsou
naprosto stejná. PHP totiž vnitřně zná jen pole asociativní a když
založíme číselně indexované, jednoduše vytvoří indexy podle pořadí
položek.
Ve většině jazyků je pole omezené svou velikostí a když se jednou vytvoří, nelze do něj prvky přidávat. V PHP tomu tak není, s polem si můžete dělat úplně co chcete.
Zpracování formulářů v PHP
Konečně se dostáváme k něčemu zajímavému. Pravé aplikace přeci reagují na vstup od uživatele. Zkusme si takovou aplikaci vytvořit - naprogramujeme si jednoduchou webovou kalkulačku.
Webové aplikaci lze předat vstup pomocí dvou metod - GET
a
POST
. HTTP protokol zná ještě několik dalších metod (REST),
ale prohlížeče je nepodporují. Data dorazí do PHP skriptu vždy v
asociativním poli, které se jmenuje podle metody, kterou přišla.
Vytvořme si nějakou složku pro novou aplikaci (třeba
kalkulacka/
).
Metoda GET
Vytvořte si soubor kalkulacka.php
. Pokud budeme tomuto skriptu
chtít předat nějaká data metodou GET
, zadáme je do URL adresy
pomocí tzv. query stringu. Query string začíná otazníkem (?
) a
jednotlivé parametry jsou oddělené ampersandy (&
). Mezi
názvem parametru a jeho hodnotou je rovná se (=
).
V následující ukázce použijeme znak &
. Na
české klávesnici ho píšeme pomocí Pravého Alt a klávesy
C:
Do URL adresy bychom tedy zadali toto:
localhost/kalkulacka/kalkulacka.php?cislo1=10&cislo2=20
Skriptu předáváme metodou GET
dvě proměnné. První se
jmenuje cislo1
a má hodnotu 10
, cislo2
má hodnotu 20
.
Obsah skriptu by mohl být následující:
<!DOCTYPE html> <html lang="cs"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <?php $soucet = $_GET['cislo1'] + $_GET['cislo2']; echo("Součet: $soucet"); ?> </body> </html>
Skript pracuje s tzv. superglobálním polem
$_GET
. Superglobálním proto, že je přístupné
odkudkoli. Všechny proměnné, které byly skriptu odeslány v query stringu,
nalezneme v tomto poli. Pole je asociativní, jako klíč zadáme název
proměnné a dostaneme její hodnotu. Součet hodnot jednoduše vypíšeme.
Výsledek:
Metoda GET
slouží spíše pro získávání podstránek webu a
pro kalkulačku se příliš nehodí.
Metoda POST
Metoda POST
se obvykle používá pro odesílání formulářů.
Naše aplikace se bude nyní skládat ze dvou souborů. V prvním bude
formulář, kam uživatel zadá 2 čísla do textových polí a odešle
tlačítkem "vypočítej". Data se odešlou druhému souboru, což bude PHP
skript, který provede výpočet.
kalkulacka.html
Soubor obsahuje formulář. Můžeme mu dát koncovku PHP, ale není to
nutné, žádné PHP bloky zde nejsou. Pokud soubor pojmenujete index, zobrazí
se samozřejmě jako výchozí stránka, když do složky
kalkulacka/
přistoupíte. Soubor bude vypadat asi takto:
<!DOCTYPE html> <html lang="cs"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <p>Vítejte v kalkulačce, zadejte 2 čísla a získejte jejich součet.</p> <form method="POST" action="soucet.php"> <input name="cislo1" type="text" /><br /> <input name="cislo2" type="text" /><br /> <input type="submit" value="Sečti" /> </form> </body> </html>
Výsledek by měl vypadat takto:
Na HTML stránce máme formulář a v něm pár vstupních textových polí
typu text. Pokud ctíte HTML 5, můžete použít jako typ polí ve formuláři
number
. Poslední pole je odesílací tlačítko, které vyvolá
odeslání formuláře.
Zajímavější jsou atributy formuláře. Atribut method
na
hodnotě POST
udává způsob, jakým se data z formuláře
odešlou. Ačkoli POST
není výchozí hodnota, nedává pro
formuláře příliš smysl používat žádnou jinou. Pokud bychom atribut
neuvedli, použila by se metoda GET
, kde by formulář odeslal data
jako query string do URL adresy. Tak by byly jednak vidět a také je délka
adresy omezená. Používejte tedy vždy POST
. Atribut
action
označuje skript, který formulář zpracuje. Pokud atribut
neuvedeme, odešle se formulář do toho samého souboru, ve kterém se
nachází.
soucet.php
Soubor je skript s obslužným kódem, kterému se data z formuláře
odešlou a on je zpracuje. Asi vás nepřekvapí, že data z formuláře
přijdou v superglobálním poli $_POST
. Opět je
asociativní a klíčem jsou názvy textových (nebo jiných) polí, tedy jejich
atributy name
.
Obsah skriptu bude následující:
<!DOCTYPE html> <html lang="cs"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Kalkulačka</title> </head> <body> <?php $soucet = $_POST['cislo1'] + $_POST['cislo2']; echo("Součet: $soucet"); ?> </body> </html>
Oproti obslužnému skriptu pro metodu GET
se vlastně vůbec
nezměnil. Můžete si vyzkoušet, že kalkulačka opravdu počítá
V následujícím cvičení, Řešené úlohy k 5. lekci PHP, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 2502x (1.32 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP