Jak trpaslíčkovi předat informace

Předchozí: o cyklu while.

Pokud jste vstoupili přímo na tuto stránku, vysvětlení analogie s trpaslíkem najdete zde.

Parametr v adrese

Doposud jsme se bavili o tom, že trpaslíček má všechno předem připravené v obálkách a my mu jen dáme vědět, kterou z těch obálek si má číst a plnit pokyny v ní obsažené. Všechno ale už bylo předem v obálce; pokud jsme mu už dávno předem napsali, že bude mít v šuplíku desítku, a vzápětí jsme chtěli, aby se rozhodnul podle toho, jestli má v šuplíku deset nebo víc, věděli jsme sami, jak to dopadne, a tu podmínku jsme si mohli klidně ušetřit.

My ale máme možnost trpaslíčkovi něco posílat do těch jeho šuplíků operativně, ve chvíli, kdy už ho necháváme pracovat a když už jsou obálky připravené u něj. Jak si s ním může běžný uživatel, který si prohlíží výsledky jeho práce, povídat? No stejným způsobem, jakým mu říká, kterou obálku má vzít, tj. přes řádek prohlížeče s adresou.

adresní řádek prohlížeče

Tam jste zvyklí napsat něco jako http://polopate.jakpsatweb.cz/index.php, čímž trpaslíčkovi, který sedí v domečku polopate.jakpsatweb.cz říkáme, že má vzít obálku index.php a plnit povely, které v ní najde (viz úvod k trpaslíčkovi).

Takže využijeme tohohle způsobu a trpaslíčkovi k informaci, kterou obálku má vzít, zároveň přidáme něco do šuplíku. Pro ty účely má jedno velké šuple s přihrádkami (neboli pole, jak jsme si už o něm povídali).

Celé to šuple se jmenuje $_GET. Je to dost divný jméno, ale co se dá dělat. Zkuste se s tím smířit - se znakem $ se už známe, podtržítko _ se vyskytuje i u dalších, předem pojmenovaných šuplíků, o kterých jsme se zatím nebavili, a GET znamená anglicky "dostat", takže tam trpaslík bude skladovat, co od nás dostane. Bude to tam pro nás mít, dokud mu neřekneme o jinou obálku, dokud tedy nezavoláme jinou stránku; pak tohle šuple komplet vysype a obsah zahodí.

Přihrádky tohohle šuplíku, tedy prvky tohoto pole, si můžeme pojmenovat podle libosti; a ta jména pošleme trpaslíkovi stejným způsobem. Tak se na to pojďme podívat:

Trpaslíčku, vezmi si obálku index.php, ale než začneš číst a pracovat, pojmenuj si v šuplíku $_GET jednu přihrádku jménem "text" a dej do ní slovo "ahoj"; druhou pojmenuj "osloveni" a do ní dej slovo "pane".

A jak to přeložíme? Nebudeme překládat přímo do PHP, ale ukážeme si, jak máme zavolat trpaslíka, aby to takhle pochopil - určitě jste to už viděli, třeba i tady na tomhle webu, ale možná jste nevěděli, co to přesně znamená:

http://polopate.jakpsatweb.cz/index.php?text=ahoj&osloveni=pane

A do příslušné obálky už můžeme napsat pokyny, které počítají s tím, že v přihrádkách šuplíku $_GET něco je - i když nevíme, co to přesně bude. Podívejte se na skript, který s $_GET pracuje a samozřejmě také na výsledek - všimněte si, že v odkazu už jsou stejné údaje, jako v ukázce o kousek výš, tj. ?text=ahoj&osloveni=pane.

Klikněte si ještě jednou na výsledek zmíněného skriptu, prostudujte si hlavně adresu té stránky - a zkuste si třeba něco v té adrese měnit. Když změníte to, co je za rovnítky, změní se i obsah stránky = protože měníte to, co si má trpaslík před zpracováním pokynů nastrkat do šuplete. Když změníte co je před rovnítekm, změní se jméno přihrádky, a ta proměnná pak na stránce nebude fungovat, protože s tím jsme při psaní skriptu nepočítali a odkazujeme se na jména přihrádek "text" a "osloveni".

Praktické použití

Touhle cestou můžeme trpaslíkovi poslat aktuální informace, a on se podle toho zachová. Má to jen drobnou nevýhodu - jména přihrádek a hlavně posílané hodnoty každý vidí a navíc je může jednoduše měnit a tak posílat trpaslíkovi něco, s čím jsme při psaní obálek nemohli počítat. Na to je třeba při použití tohoto způsobu myslet.

Takže dejme tomu, že dáme uživateli dva odkazy, ze kterých si má vybrat (jestli si vybere po pravdě nebo ne, nás až tak nezajímá):
je mi přes osmnáct nebo osmnáct mi ještě nebylo

Oba odkazy vedou na stejnou stránku, ale předávají zároveň trpaslíkovi do šuplíku informaci o věku, tak jak tedy byl uživatel ochoten prozradit. Trpaslík má šanci se nějak rozhodnout, a tak to udělá, protože jsme mu do obálky napsali tohle.

Když se najde vtipálek, který zkusí za vek= v adrese dopsat něco jiného, nebude to fungovat vůbec, resp. nebude splněná ani jedna podmínka a nezobrazí se v tomhle případě nic. Bylo by lepší ale nějak to ohlídat. Jedna možnost je podmínky trochu předělat:

if ($_GET['vek']=="dospely") {
   echo "<p>Snad jste nečekali něco mládeži nepřístupného ;-)</p>";
} elseif ($_GET['vek']=="mladistvy") {
   echo "<p>Mládí má zelenou!!!</p>";
} else {
   echo "<p>Ty ty ty, co nám vrtáš do URL!</p>";
}

kód skriptu, výsledná stránka s neplatnou hodnotou v adrese

Když si připomenete, jak fungují podmínky, uvidíte, že když nebude v adrese ani jedno, ani druhé, dojde na tu třetí část.

Je tu i jiné (určitě ne poslední) řešení - před podmínky dáme následující:

if ($_GET['vek']!="dospely" && $_GET['vek']!="mladistvy") {
   $_GET['vek']="mladistvy";
}
echo "V šuplíku $_GET v přihrádce 'vek' mám ".$_GET['vek'];

kód skriptu, výsledná stránka s neplatnou hodnotou v adrese

Tady jsme na začátek připsali: Jestli nemáš v přihráce 'vek' šuplíku $_GET ani slovo "dospely", ani "mladistvy" (to znamená je tam něco jiného nebo dokonce vůbec nic), tak do téhle přihrádky dej slovo "mladistvy". Určili jsme si, že tohle bude výchozí hodnota, a není-li uvedeno jinak, budeme dělat, jako že bylo tohle zadáno.



Firefox: Bezpečnější, rychlejší, lepší
píše -dis- bb(zavináč)choltice.eu