Autor Zpráva
Onecar
Profil
Opět zdravím,

ve svém novém projektu bych rád jisté části webu vkládal skrze funkci include();. Odkazy jsou trojího typu:

index.php?page=rovnice
index.php?page=rovnice&strana=1
index.php?page=rovnice&priklad=1

Rozhodovací schéma v souboru index.php vypadá takto:

<? 
       
       #1 DEFAULT, tj. nic nezadáno
       if (!isset ($_GET['page']) AND !isset ($_GET['strana']) AND !isset ($_GET['priklad']))
       include ('./tmp/tmp_uvod.php');
       
       #2 VÝPIS sekcí a jejich příkladů
       if (isset ($_GET['page']) AND !isset ($_GET['strana']) AND !isset ($_GET['priklad'])) {
         
         switch ($_GET['page']) {
           
           case 'rovnice':
             include ('./tmp/tmp_rovnice.php');
             break;
           
         }
         
       }
       
       #3 STRÁNKA dané sekce
       if (isset ($_GET['page']) AND isset ($_GET['strana'])) {
         
         switch ($_GET['page']) {
           
           case 'rovnice':
             include ('./tmp/tmp_rovnice.php?strana='.$_GET['strana'].'');
             break;
           
         }
         
       }
       
       #4 VÝPIS JEDNOTLIVÉHO PŘÍKLADU dané sekce
       if (isset ($_GET['page']) AND isset ($_GET['priklad'])) {
         
         switch ($_GET['page']) {
           
           case 'rovnice':
             include ('./tmp/tmp_rovnice.php?priklad='.$_GET['priklad'].'');
             break;
           
         }
         
       }
     
     ?>


Podmínky #3 a #4 vrací velice zajímavý Warning:

Warning: include(./tmp/tmp_rovnice.php?strana=1) [function.include]: failed to open stream: No error in C:\AppServ\www\index.php on line 37

Warning: include() [function.include]: Failed opening './tmp/tmp_rovnice.php?strana=1' for inclusion (include_path='.;C:\php5\pear') in C:\AppServ\www\index.php on line 37


Závěr: všechna include(); krom #3 a #4 fungují. Dal bych ruku do ohně, že je to tím, že se přes tuto funkci snažím posílat další parametry (jak vidno z kódu), které jsou ale pro mě nezbytné. V souboru tmp_rovnice.php je další rozhodovací schéma, kdy se vůbec rozhoduje, co se vypíše (buď vše, nebo pouze požadovaná strana či pouze požadovaný příklad) podle odeslaného parametru ze souboru index.php.

Napadá někoho řešení? Předem mnohokrát děkuji.
Alphard
Profil
Include takto s parametry v adrese nefunguje. Není to ale ani nutné. Všechny viditelné proměnné rodičovského scriptu jsou dostupné v tom includovaném a obráceně.
Onecar
Profil
Hluboce se stydím, že jsem předem nehledal. Odpověď jsem nalezl v PHP FAQ:

http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=2111
DoubleThink
Profil *
Alphard:
Include takto s parametry v adrese nefunguje.
Přesněji filesystem serveru tento zápis s proměnnými nezná a nepodporuje. Ostatně by jejich hodnoty ani neměl kam předat.
kordy
Profil
Chtěl bych se zeptat je to částečně k tématu nebudu teda zakládat nový vlákno...

Mám php kód kterej zapisuje chtěl bych aby zapisoval hodnoty includovaného souboru, ale místo toho se mi oncludovaný soubor otevírá...V čem je chyba? Případně jak jinak řešit?

kód je zde:


<?php
$zapis = fopen("soubor.html", "w");
fwrite($zapis, include "vypis.php");
fclose($zapis);

?>
xmark
Profil
kordy:
Nepochopils, co dělá include.
Prostě si to představ tak, že místo > include "vypis.php" < je zkopírovaný obsah souboru vypis.php. Skoro přesně tak se to chová.

chtěl bych aby zapisoval hodnoty includovaného souboru
Nevím, co si představuješ pod slovem hodnoty. Jestli myslíš jeho obsah, použij http://cz.php.net/manual/en/function.file-get-contents.php a příště formuluj lépe.
AM_
Profil
[#5] kordy
nové vlákno si založit mohl, kdyby se všechny dotazy na include cpaly do jednoho vlákna, nedopadlo by to dobře.
soubory se kopírují pomocí funkce copy(), tenhle výřezek je spíš demonstrativní neznalost principu strukturovaného programování - datové typy, které zde kombinuješ, rozhodně takto fungovat nemohou, nastuduj si něco o výrazech a jejich návratových hodnotách.
kordy
Profil
xmark díky moc přestně to jsem potřeboval... :)

AM_ díky za odpověď, nedostatků mám určitě víc pak to celý pořádně prostuduji :)
xmark
Profil
xmark:
zkopírovaný obsah souboru
Ještě se musím opravit. Samozřejmě Ne zkopírovaný, ale zkopírovaný a funkční ve smyslu php.
DoubleThink
Profil *
xmark:
že místo > include "vypis.php" < je zkopírovaný obsah souboru vypis.php. Skoro přesně tak se to chová.
Skoro tak.
Přesněji je to tak, že když interpret narazí na jazykový konstrukt include, ukončí aktuální blok kódu (tj. jakoby na tom místě bylo ?>) a pokračuje v interpretaci v uvedeném souboru. Na jeho konci, nebo na prvním příkazu return, se pak vrátí na původní místo rodičovského souboru, otevře blok kódu (<?php) a pokračuje v interpretaci.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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