Jak využít include (2)

V minulé kapitole jsme si ukázali, jak dostat do stránky proměnnou. Teď se podíváme na to, jak ji využít pro načtení správného obsahu do stránky.

Načtení obsahu podle předaného parametru

Když se nad tím zamyslíme, přijdeme na postup, co má skript dělat; pak si ukážeme, jak to napsat v PHP. Už víme, jak skriptu předat nějaký parametr. A co s nim skript má udělat?

Forma souboru

Už to tady bylo, ale jen zopakuju, že stránka index.php bude vypadat přibližně takto (samozřejmě tohle je jen příklad):

<?php
include ("head.php");
include ("menu.php");
// a sem patří vložení obsahu, které teď budeme řešit
include ("bottom.php");
?>

1. Zpracování hodnoty předané v adrese

Už jsme si také řekli, že proměnná předaná v adrese formou index.php?str=kontakt je ve skriptu k dispozici pod názvem $_GET['str'] a má tu hodnotu, kterou jsme jí v adrese předali, v tomto případě hodnotu "kontakt". Tento název je ale trochu nepraktický, určitě bude lepší si tuto hodnotu přeuložit do nějaké jednodušeji pojmenované proměnné. Na začátek skriptu tedy napíšeme:

$stranka = $_GET['str'];

V proměnné $stranka teď máme totéž, co bylo v adrese za str=, ať už to bylo (nebo nebylo) cokoli.

2. Alternativa pro případ, že nebylo nic zadáno

Rozhodně se ale může stát, že někdo naši stránku index.php zavolá bez této proměnné, tj. bez parametru za otazníkem. Co potom? Napíšeme do skriptu česky řečeno přibližně toto: pokud vůbec v adrese není stanovena proměnná str, tak do proměnné $stranka vložíme základní výchozí hodnotu, dejme tomu "uvod". Přeloženo do PHP:

if (!isset($_GET['str'])) {
$stranka = "uvod";
} else {
$stranka = $_GET['str'];
}

Trochu si to rozebereme, abyste věděli, co a proč píšeme.

3. Ověření platnosti hodnoty

Teď máme v proměnné $stranka určitě nějakou hodnotu; buď to, co bylo zadáno v adrese, nebo hodnotu "uvod". Protože mám v úmyslu z této hodnoty vytvořit název souboru, který se pak bude includovat do stránky, měli bychom rovněž ověřit, jestli je hodnota v proměnné $stranka z tohoto pohledu platná, tj. jestli bude co includovat a jestli to bude správně.

Prozradím vám svůj plán: cvičně sestavím název souboru pro includování , zjistím jestli odpovídá nějakému připravenému souboru, a jenom pokud ano, tak ho skutečně includovat budu. Soubory pro includování budu mít připravené v adresáři "soubory".

$soubor = "soubory/".$stranka.".php"; // k názvu připojíme cestu do adresáře zepředu a příponu zezadu
if (!file_exists($soubor)) {
$soubor = "soubory/uvod.php";
} // pokud neexistuje soubor, který chceme includovat, budeme vkládat soubor uvod.php

4. Načtení souboru

Tak a jsme skoro u konce. Teď už jen na správné místo v souboru index.php vložíme
include ($soubor);

Pozor - důležité!

Jak se můžete na mnoha místech dočíst, takhle jednoduše napsaný skript je "děravý" a pro široké použití nevhodný; snažila jsem se především nastínit způsob, jakým lze s proměnnou z URL pracovat. O nebezpečnosti takového použití include se můžete dočíst např. v článku Víta Šestáka.

Jakmile do skriptu trochu proniknete, doporučuji (před výše uvedeným bodem 3) například přidat podmínku, ve které vyjmenujete všechny povolené includovatelné názvy souborů, tj. asi takto:

if ($stranka!="uvod" && $stranka!="kontakty" && $stranka!="odkazy") {
// vyjmenujeme všechny "povolené" názvy
    $stranka="uvod";
}

Závěrem

Tady platí víc než jinde, že je to postup, který může každý napsat jinak. Někdo třeba stanoví seznam "platných" hodnot pro parametr v adrese, a bude ji ověřovat podle toho; bystrým rovněž neuniklo, že pokud dojde na to, že se název souboru nastaví na uvod.php, už neověřujeme, jestli tam skutečně existuje… Snad jste aspoň pochopili, o čem to je ;-)


Firefox: Znovuzrozený prohlížeč
píše -dis- bb(zavináč)choltice.eu