Pro rozsáhlejší weby jsme zvolili metodu šablony, která se na začátku každého
souboru načetla a dále využívala (viz PHP
v praxi, 8.díl - šablona). Máte-li však menší web s pár stránkami, může
pro vás být jeho správa mnohem jednodušší, uděláte-li jej pomocí PHP jako jeden
jediný soubor. Vše se dá vyřešit velice prostě pomocí předávání proměnných přes
odkaz. Podíváme se na první ukázku:
<h1>muj web</h1> <a href="?txt=novinky">novinky</a> | <a href="?txt=kdo_jsem">kdo jsem</a> | <a href="?txt=reference">reference</a> <br><br> <? if (!isset($txt)) $txt="novinky"; switch ($txt) { case "novinky": echo "dnes byl spusten tento web..."; break; case "kdo_jsem": echo "webmaster tohoto webu."; break; case "reference": echo "zatim nemam zadne reference."; break; } ?>
|
V odkazech tentokrát není žádný soubor, nýbrž řetězec znaků, který se předá
PHP skriptu. Protože cesty jsou relativní, bude výsledná adresa např. "http://www.neco.cz/soubor.php?txt=novinky".
Otazníkem se oddělí adresa od proměnných. Pokud je tedy tímto způsobem zavolána
stránka soubor.php, automaticky se v ní vytvoří proměnná $txt a jejím obsahem
bude řetězec "novinky". V našem skriptu je jedna podmínka if(), jež
slouží pro první načtení stránky (kdy je volána adresa "http://www.neco.cz/soubor.php"
a proměnná $txt se nevytvoří odkazem). Skript pokračuje přepínačem switch(),
jehož význam i syntaxi jsme již probírali.
Podobným způsobem můžeme předávat i více proměnných - budou se oddělovat znakem
&.
<? if (!isset($txt)) { $txt="novinky"; $min="odnikud"; } ?> <h1>muj web</h1> <a href="?txt=novinky&min=<?= $txt ?>">novinky</a> | <a href="?txt=kdo_jsem&min=<?= $txt ?>">kdo jsem</a> | <a href="?txt=reference&min=<?= $txt ?>">reference</a> <br><br> <? switch ($txt) { case "novinky": echo "dnes byl spusten tento web..."; break; case "kdo_jsem": echo "webmaster tohoto webu."; break; case "reference": echo "zatim nemam zadne reference."; break; } ?> <br><br> prisel jsi ze stranky: <?= $min ?>
|
Můžeme např. předávat informaci, ze které naší stránky uživatel přišel (k tomu
se používá jiný způsob ale tento se výborně hodí k ukázce). Zde už tedy nastavení
hodnoty $txt musíme předřadit odkazům, neboť ji v nich budeme potřebovat. Za
proměnnou $min tedy dosazujeme aktuální stránku. Ta zvláštní konstrukce <?=
$txt ?> je jedním z řady zjednodušení PHP syntaxe. Ve "standardní řeči"
znamená <? echo $txt; ?>. Tímto způsobem se vypisuje i proměnná $min na
konci skriptu.
U webu tak do pěti stran může být sloučení šablony a obsahu stránek velice
výhodné. Na server posíláte vždy jen jeden soubor a přitom jeho velikost není
přehnaně veliká. Předávání proměnných odkazy ale může být použito i v rámci
rozsáhlejšího webu např. u náhledů s obrázky, jejichž plnou velikost však chcete
vidět v rámci stránky, nikoliv jako samostatný soubor. Na stránce obrazky.php
máte tedy 20 náhledů fotografií a u každé z nich odkaz ve tvaru "?show=01.jpg".
Skript ve stránce pak vypadá např. takto:
<h1>fotky</h1> <? if (!isset($show)||$show=="nahledy") { ?> <a href="?show=foto1.jpg"> <img src="foto1_nahled.jpg"> </a> <a href="?show=foto2.jpg"> <img src="foto2_nahled.jpg"> </a> <? } else { ?> <img src="<?= $show ?>"><br> <a href="?show=nahledy">nahledy</a> <? } ?>
|
Přes proměnnou $show se tentokrát předává název konkrétního obrázku. Tady ovšem
už je na místě určité ošetření, protože kdokoliv může do prohlížeče zadat adresu
ve tvaru "http://www.neco.cz/soubor.php?show=http://www.jinde.cz/jiny_obrazek.jpg".
To sice nepředstavuje nějaké nebezpečí, ale kdybychom takovýmto způsobem otevírali
něco jiného než jen obrázky, mohlo by. Jeden ze způsobů, jak toto obejít, je
použití přepínače:
<h1>fotky</h1> <? if (!isset($show)||$show=="nahledy") { ?> <a href="?show=foto1"> <img src="foto1_nahled.jpg"> </a> <a href="?show=foto2"> <img src="foto2_nahled.jpg"> </a> <? } else { switch($show) { case "foto1": $ukaz="foto1.jpg"; break; case "foto2": $ukaz="foto2.jpg"; break; } ?> <img src="<?= $ukaz ?>"><br> <a href="?show=nahledy">nahledy</a> <? } ?>
|
Zde je názorně vidět, že se do následného odkazu na obrázek nedostane nic nechtěného,
pouze předdefinované cesty k souborům. Není to však nikterak krátké. Lepší je
využití pole:
<h1>fotky</h1> <? if (!isset($show)||$show=="nahledy") { ?> <a href="?show=0"> <img src="foto1_nahled.jpg"> </a> <a href="?show=1"> <img src="foto2_nahled.jpg"> </a> <? } else { $ukaz=array("foto1.jpg","foto2.jpg"); ?> <img src="<?= $ukaz[$show] ?>"><br> <a href="?show=nahledy">nahledy</a> <? } ?>
|
Zde využíváme automatického počítání v poli $ukaz. V něm jsou opět zapsané
jednotlivé cesty, ke kterým se přistupuje pomocí indexu (proměnná $show).
V jednoduchosti je síla, ale nesmí být na úkor přehlednosti a bezpečnosti.
Nezapomeňte, že tímto způsobem se dá nastavit jakákoliv proměnná, proto by na
začátku práce s ní měla být nastavena na určitou hodnotu, aby se zabránilo olivnění
"z vnějšku".
Veselý Jan
|