Autor Zpráva
tony2
Profil
Prosimvás potřebuju pomoct chci mít stránky poschovávané v adresářich např:
web/uvod.php
php/date.php

... ale jaksi nemužu vymyslet jak zařídit aby to nahrávání prohledalo i jiné složky zkoušel jsem operátor OR,pole,různé pojmenování proměnné $dir,...

<?php
    $page=$_GET["page"];
    $dir ="url/";
    $uvodni="uvod.php";
   if ($page) {
    if (file_exists($dir.$page.".php"))
        include($dir.$page.".php");
    
    
    else { include $dir."404.php"; }
    }
   else {                            
    include  ($dir.$uvodni);
   }
      ?>    
 
fuckin
Profil
a muzes treba rict kde je problem? Z tveho popisu nelze nic vycist, dale nechapu proc tu uvadis cely index i s html, staci jen ta podminka kde je problem ne?
panther
Profil
tony2
if (file_exists($dir.$page.".php"))
  include($dir.$page.".php");
elseif (file_exists($dir.$page.".php"))
  include($dir.$page.".php");
elseif (file_exists($dir.$page.".php"))
  include($dir.$page.".php");
proč máš třikrát v (else)if to samé?

Zkus místo $dir do každé podmíniky dosadit možné varianty cesty k souboru, případně si ty cesty všechny nahaž do proměnné (tady by asi bylo dobré pole, nevím, kolik těch možností tam je).
tony2
Profil
Ty elseif to jsem předtím něco zkoušel a zapomněl jsem to umazat jo a to pole a a ty varianty taky...
tak teď to mám takto:
<?php
    $page=$_GET["page"];
    $dir= array ("web/ , php/ , html/");
    $uvodni="uvod.php";
   if ($page) {
    if (file_exists($dir.$page.".php"))
        include($dir.$page.".php");   
    else { include ($dir."404.php"; }
    }
   else {                            
    include  ($dir.$uvodni);
   }
      ?>   
valecekm
Profil
Jak chces aby ti to prohledavalo. Myslis to tak , kdyz se nenajde danej soubor v jedne slozce, tak at se skusi prohledat v jine?
valecekm
Profil
tony2

Pokud jsi to tak myslel aby se ti skusili prohledat vsechny slozky, kdyby se to v te prvni nenaslo, tak by se hledalo v druhe a kdyby ani v te se to nenaslo, tak v tech dalsich a kdyby se to nenaslo v zadne, tak by to pripojilo tu chybovku. Ale kdyby se to naslo, tak by to pripojilo onen vyzadovany soubor, tak tady mas zdrojac:

<?php
    $page=$_GET["page"];
    $dir= array ('web/' , 'php/' , 'html/');
    $error_nenalez = 'slozkachyb/404.php';
    $uvodni="uvod.php";
    
   if (isset($page)) { 	
for ($i=0; $i<count($dir); $i++){
   	
if (file_exists($dir[$i].$page.".php")) { 
include($dir[$i].$page.".php"); 
break; 
}
else {
	if ( ($i==(count($dir))-1) and (!file_exists($dir[$i].$page.".php")) ){
    include ($error_nenalez);
 } 
	else {continue;}		
  }
 }
}
   else {                            
    include  ($dir.$uvodni);
}
?>

OTESTOVANO A FUNKCNI, ted zalezi natobe jestli si stim poradis. Ja jsem to testoval u sebe a hledal jeden soubor a misto tech include sem vypisoval hlasky, takze sem videl co to dela a jestli to uspelo nebo ne.

Moderátor Alphard: Vkládej prosím kód mezi značky [pre] a [/pre] (stačí kliknout na ).
japlavaren
Profil
valecekm
preco nepouzivas foreach() a naco pises take divne kody. pri kazdom cykle to mus pocitat count

oprava:
$dir=array ('web/' , 'php/' , 'html/');
$error='slozkachyb/404.php';
$uvod='uvod.php';
    
if (isset($page))
{ 	
        $ok=false;
        
        foreach($dir AS $d)
        {
            if( file_exists("$d$page.php") )
            {
                include "$d.$page.php";
                $ok=true;
                break;
            }
        }
        
        if( !$ok )
            include $error;
}
else
    include $uvod;
?>
valecekm
Profil
Moderátor

ok. Omlouvam se a i za ten predeslej prepis. diky ; )

japlavaren

Kazdeho napadlo neco jineho :-) . Neboj foreach znam taky, jestli myslis ze ne, ale v tuto chvilku me bleskl hlavou tento cyklus, tak sem to narychlo stvoril :-). Tod vse. Pokud se ti to zda byt divne a nevyznas se v tom, tak k tomu nemam co dodat. Ale je pravda, ze to moje reseni je pomalejsi to uznavam. ;-)
tony2
Profil
Tak použil jsem to řešení s for (to víc chápu :D ) ale mám tam problém nechce mě to načíst date.php (píše to nenalezeno) když je to někde zahrabané musím jinak odkazovat?
mám to ve složce php/date.php a odkazuju na to ?page=date.php
tony2
Profil
Jo a nechce mi to nahrát úvod ten je ve složce web/
valecekm
Profil
tony2

Neodkazuj nato ?page=date.php , ale jen ?page=date - koncovka .php se doplni automaticky
include($dir[$i].$page.".php"); 
.
Pokud bys chtel prohledavat i jine slozky, tak si je napis do toho pole $dir. Jeste to trosku teda upravim, aby to tolik nezatezovalo, pri kazdym pruchodu to musi zjistovat count, jak psal japlavaren.

Jinak takto by to melo behat, stacilo pridat pouze k tomu uvod celou adresu.

<?php
    $page=$_GET["page"];
    $dir= array ('web/' , 'php/' , 'html/'); /*pole obsahujici slozky, ktere se maji prochazet*/
    $error_nenalez = 'slozkachyb/404.php'; /* kdyz se nic nenajde, tak je tu errorova stranka*/
    $uvodni=$dir[0]."uvod.php";  /* uvod. slozka slozena z PRVNIHO prvku pole $dir(tj web/)+zbytek nazvu souboru*/

// nebo muzes primo napsat  $uvodni="web/uvod.php"; ...tj uz natobe :-)
// proc $dir[0]."uvod.php"   ?, protoze beru prvni prvek z pole(tj slozka web/) a pole nezacina jednickou ale vzdycky 0

    $obsah=count($dir); /*pocet prvku v poli(cislo, ale to uz zacina od 1,nikoli od 0*/
    
   if (isset($page)) {     
for ($i=0; $i<$obsah; $i++){
// $i urcuje ktery prvek se ma vytahnout, zaciname na 0(tj1.),pokracovat se bude pokud bude $i mensi jak $obsah(poc.prv.)
// a pri kazdym dalsim pruchodu se k $i pricte +1 ($i++), aby se skusila otestnout dalsi slozka v poli
       
if (file_exists($dir[$i].$page.".php")) { /*pokud soubor existuje*/
include($dir[$i].$page.".php"); /* pripoji se*/
break; /* a cyklus FOR skonci-BREAK */
}
else {/*pokud podm. nebude splnena, ze sb. existuje*/
// zjistime jestli cyklus prosel vsechny prvky v poli ..$i==($obsah)-1 "-1 kvuli tomu,ze jsme zacinali 0"
// a jeste pro jistotu overime jeslti opravdu nebyl nalezen !file_exists ... vykricnik znaci zapor(negace)
    if ( ($i==($obsah)-1) and (!file_exists($dir[$i].$page.".php")) ){
    include ($error_nenalez); /* tak pripojime chybovvou stranku*/
 } 
// pokud ovsem neni splnena predesla podminka, pokracujeme dale
// CONTINUE  preskoci na zacatek cyklu a jede znovu
    else {continue;}        
  }
 }
}
   else {                            
    include  ($uvodni);
}
?>


Kdyby nastal nejakej dalsi problem, tak me uz pisni na mail, at to tu zbytecne neplnime drobnejma vecma. valecekm(uzenac)seznam.cz
tony2
Profil
jo pěkné díky vyzkouší jestli funguje jo a to pole mě tak nemusíš vysvětlovat sem o tom četl včera pul hodiny :D
tony2
Profil
Jo hou jo ste dobří díky všichni!

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:

0