Autor Zpráva
crooner
Profil *
Zdravím Vás, prosím potřeboval bych poradit pro Vás s maličkostí, pro mě s nepřekonatelným problémem. Nikdy jsem nebyl schopen se php naučit a teď hořce lituji.
Mám vytvořeny stránky, kde si grafik vymyslel celkem náročné kousky. Takže i když jsem to stlačil na minimum, velikost stránek narůstá. Potřebuji tedy všechny odkazy měnit jen v divu.
Mám tento php script
<?php
$root = "";
$id = $_REQUEST['id'];
$obsah = $id. ".php";
if (File_Exists ($obsah)):
include $obsah;
endif;
?>

a tímto se na něj odkazuji:
href="index.php?id=test"

a teď k problému: 1) potřebuji do scriptu nějak zahrnout adresář kde bude uložen zbytek obsahu, abych ho nemusel mít v kořenovém adresáři.
2) nevím jak zařadit abych měl při načtení index.php div vyplněn úvodním textem

Poradíte mi prosím někdo? už jsem to asi tak 100x přepsal a nahrál na web a přečetl tunu stránek a prostě jsem na to nepřišel.
Víte jak na to?
Předem Díky
YoSarin
Profil
Soubor index.php umístěný v rootu webu:
$path = './content/uvod.php';
if (!empty($_REQUEST['id'])) {
    $name = $_REQUEST['id'];
    $name = preg_replace('~[^a-z0-9\-_+]+~i', '-', $name); // odstraníme znaky které by mohly způsobit nějaký problém
    if (file_exists('./content/' . $name . 'php')) {
        $path = './content/' . $name . 'php';
    } else {
        $path = './content/404.php'; // chybová stránka pokud uživatel leze na stránku která neexistuje
    }
}
include $path;

Ostatní soubory budou ve složce content/
crooner
Profil *
Ty jo fakt super díky moc, hned to testnu, doufám, že tam nemam nějak binec a všechno poběží:)
Ještě jednou dík
crooner
Profil *
aaa tak někde tam je chybička, nejspíš něco není uzavřené, ale vůbec nevim kde,

path = './page/test.php';
if (!empty($_REQUEST['id'])) {
    $name = $_REQUEST['id'];
    $name = preg_replace('~[^a-z0-9\-_+]+~i', '-', $name); // odstraníme znaky které by mohly způsobit nějaký problém
    if (file_exists('./page/' . $name . 'php')) {
        $path = './page/' . $name . 'php';
    } else {
        $path = './page/404.php'; // chybová stránka pokud uživatel leze na stránku která neexistuje
    }
}
include $path;

Moderátor panther: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
crooner
Profil *
to co je tučně je oranžové ve scriptu
crooner
Profil *
sorry, moc se omlouvám, jsem blbec:), už do toho čumim asi moc dlouho:)
crooner
Profil *
tak se mi tam nakonec stejně vloudila chyba, nefungují mi odkazy nevím jestli se odkazuji spravne máme cestu
href="index.php?id=sluzby"


a toto to píše:
Warning: main(): Unable to access ./page/404.php in /3w/borec.cz/c/crooner/index.php on line 54

Warning: main(./page/404.php): failed to open stream: není souborem ani adresářem in /3w/borec.cz/c/crooner/index.php on line 54

Warning: main(): Failed opening './page/404.php' for inclusion (include_path='.:/usr/local/lib/php') in /3w/borec.cz/c/crooner/index.php on line 54


chyba je na řádku
include $path;


poradíte mi pls?
panther
Profil
crooner:
vem si slovník a zkus si přeložit, co znamená: „failed to open stream: není­ souborem ani adresářem“ (diakritiku jsem opravil).
crooner
Profil *
vím přesně co se tam píše, ale nevím jak to opravit
panther
Profil
crooner:
ale nevím jak to opravit
vytvořit soubor 404.php v adresáři page, který bude ve stejném adresáři jako soubor s inkriminovaných scriptem (aneb zjisti si, jak fungují relativní adresy).
crooner
Profil *
ok takže to jsem udělal, už mě to nefackuje za neexistující soubor, vytvořil jsem ho prázdný a teď ho to vesele zobrazuje, ale spíše bych potřeboval zobrazit ty s textem, v tom scriptu mi nefungují to odkazování na ostatní php soubory
panther
Profil
crooner:
vypiš si, co je v proměnné $name, jaký soubor se snažíš includovat a který testuješ na existenci. Já už tu chybu vidím - a ty víš, kde hledat.

Ono se někdy vyplatí přemýšlet a ne jen slepě kopírovat chyby jiných (YoSarin tam vyrobil chybu, kterou ty jsi tam prve neměl).
crooner
Profil *
ok budu hledat, ale myslím, že tak za hodinu napíšu, že stejně nevím když do té doby neusnu, ale dík za snahu udělat ze mě programátora php;)
crooner
Profil *
nebudu to protahovat, prostě tam nic nevidim, php je pro mě velká neznámá, jsem rád, když rozluštim co plní jakou funkci, ale abych si ti byl jistej to teda vážně nejsem
panther
Profil
crooner:
if (file_exists('./page/' . $name . '.php')) {
    $path = './page/' . $name . '.php';
Předpokládám, že v $name je název stránky, že ti z toho reguláru vyleze to, co očekáváš.
YoSarin
Profil
crooner:
Ha, pardon za chybu, trochu jsem se v těch tečkách ztratil, panther má samozřejmě pravdu.
crooner
Profil *
no jo, ty jo tak to bych tu byl asi do rána, díky moc, už to šlape, ještě spousta grafických úprav a je hotovo:)
crooner
Profil *
prosím Vás měl bych na Vás ještě jeden dotaz. tuhle prasárnu jsem na stránkách dělat pro to aby všechny obrázky, odkazy atd.. zůstaly statické a načítal se pouze obsah div, ale jak jsem právě zjistil tak to moc nefunguje, po kliknutí na odkaz celé stránky zhasnou a po chvíli se zobrazí se změněným obsahem. nevíte co je špatně nebo je to normální? či jak toto vyřešit?
YoSarin
Profil
crooner:
To je normální - pokud bys chtěl dynamickou změnu části obsahu, tak to musíš udělat s pomocí javascriptu. Ale za normálních okolností by obrázky apod. měly zůstat v cache, takže reload celé stránky by neměl uživateli nijak vadit.

Existuje pár problémů, kterým se použitím PHP vyhneš a při použití javasctiptu (resp. AJAXu) jim musíš věnovat zvláštní pozornost. Jedním z nich je například historie prohlížeče - při dynamické změně stránky musíš změnit i url, aby se uložila do historie prohlížeče (nejčastěji pomocí #kotvy). Zároveň musíš zajistit aby při zpětném přechodu na tento odkaz se načetl odpovídající obsah (tzn. hlídat změnu #kotvy).


K tomu musíš - samozřejmě nemusíš, nikdo tě k tomu nedonutí, ale je to vhodněší.
crooner
Profil *
a jak to má řešené slečna tady? http://www.nabytek-homer.cz/satniskrine.html tej to ani nemrkne? z kódu jsem nic nevyčetl
YoSarin
Profil
crooner:
Buď pravděpodobně velmi podobně k tomu, co jsme ti tu poradili, nebo jen čistě statické, bez PHP.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: