Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  PHP v praxi, 21. díl - soubor.php?jak=na&t=o
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Proměnné tvořené odkazem představují zajímavé rozšíření práce se stránkami. Manipulace s nimi je přitom velice jednoduchá.

Veselý Jan - 22.02.2002 - tutorial - Rubrika: PHP
Předchozí díl: PHP v praxi, 20. díl - Přístupová práva
Seriál: 
Následující díl: PHP v praxi, 22. díl - Vytvoření zmenšených obrázků

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


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.73 (3786)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
kovra07.02.12:20odkazy
John201027.02.21:22clanek
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!