Autor Zpráva
crooner
Profil *
prosím o radu, toto je část kodu pro vkládání, řešil jsem to tu dříve, nakonec jsem kod rozchodil. ale potřeboval bych poradit jaký je nejlepší zápis, pro toto:
první if je jasné, vkládá soubory ze složky nabidka
druhe else if momentálně ze složky pily_hobby, ale jak to mám prosím zapsat, když potřebuji, poslední složka byla proměnná, znám všechny složky a v jedné se bude nacházet soubor, který potřebuji vložit jak na to? přes pole nebo postupně je vypsat všechny to je asi nesmysl ne?
if (file_exists('./html/nabidka/' . $name . '.php')) {
        $path = './html/nabidka/' . $name . '.php';
    } 
    elseif (file_exists('./html/nabidka/pily_hobby/' . $name . '.php')) {
        $path = './html/nabidka/pily_hobby/' . $name . '.php';
    }else 
rad bych aby to vypadalo nějak takto:
 elseif (file_exists('./html/nabidka/'. $slozka .'/' . $name . '.php')) {
        $path = './html/nabidka/'. $slozka .'/'. $name . '.php';
Alphard
Profil
Vy předem nevíte, kde je daný soubor? Jestli máte whilelist, projít cyklem, jinak by mohl pomoci glob().
crooner
Profil *
já to samozřejmě vím, ale nechci natvrdo vypisovat 30 adresářů do podmínky
crooner
Profil *
nebyl by jste prosím někdo ochotný udělat mi nástřel? já to asi dohromady nedám:( tady je celý kod
<?php 
  $path = './html/nabidka/pily_hobby.php';
  $slozka = array ("pily_hobby", "pily_farma", "pily_profi");
 
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('./html/nabidka/' . $name . '.php')) {
        $path = './html/nabidka/' . $name . '.php';
    } 
    elseif (file_exists('./html/nabidka/'. $slozka.'/' . $name . '.php')) {
        $path = './html/nabidka/'. $slozka.'/' . $name . '.php';
    }else {
        $path = './html/404.php';
         // chybová stránka pokud uživatel leze na stránku která neexistuje
    }
}

include $path;


?> 
to pole jsem jen zkoušel samozřejmě to takto nelze.hlavně by asi bylo lepší kdyby to prohledávalo samo všechny podřízené složky
Alphard
Profil
glob() dokáže prohledat více adresářů, např.
print_r(glob('../*/a_08.jpg'));
crooner
Profil *
nj jenže v php je pro mě pořád španělská vesnice kam to mam umístit:)


asi by to mělo být nějak takto, že? $slozka= glob('./html/nabidka/*/'.$name);, ale nevím jak to vpasovat do kodu
crooner
Profil *
poradíte mi prosím jak to řešit? možná by mi stačilo kdybych dokázal nějak do proměnné dostat id stránky na, které stojím a z které se odkazuji dál. protože bych mohl stejně tak pojmenovat složky. už jsem vyzkoušel x postupů a žádný mi nešlape. nevím jak tam dostat tu složku. a výpisem každé složky zvlášť do podmínky, to nevím jestli je správné.
Alphard
Profil
Já jsem vám poradil klíčovou funkci, sám jste přišel na tvar crooner [#6], který potřebujete, jen tam asi chybí extenze .php. V $slozka bude pole s výsledky, tedy buď kompletní cesta, nebo prázdné pole. Tak přemýšlejte dál, krok po kroku. Našlo se něco? count() Ano? První výskyt je pod klíčem 0 a máte cestu k souboru.
crooner
Profil *
tak jsem pokročil takto, při testu proměnné složka to vypisuje celou cestu, a pořád se mi v prohlížeči objevuje slovo array a přitom ho tu ani nemám. každopádně, stránka se ještě nenačte:)
<?php  
  $path = './html/nabidka/pily_hobby.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
   
     $slozka= glob('./html/nabidka/*/'.$name. '.php');
   echo ($slozka[0]); //test proměnné 
    
    echo $slozka; 
     if (file_exists('./html/nabidka/' . $name . '.php')) {
        $path = './html/nabidka/' . $name . '.php';
    } 
    elseif (file_exists('./html/nabidka/'. $slozka[0].'/' . $name . '.php')) {
        $path = './html/nabidka/'. $slozka[0].'/' . $name . '.php';
    }else {
        $path = './html/404.php';
         // chybová stránka pokud uživatel leze na stránku která neexistuje
    }
}

include $path;


?> 



málem bych zapomněl tu cestu to napíše správně, jenže asi potřebuji jenom ten soubor v proměnné, že


*adresář
crooner
Profil *
takto by to asi fungovalo, ale asi to nebude úplně správné řešení, nicméně webzdarma nepodporuje příkaz glob a pořád se mi tam objevuje napsané array
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
   
     $slozka= glob('./html/nabidka/*/'.$name. '.php');
   $cesta = $slozka[0];
    
    
    echo $slozka; 
     if (file_exists('./html/nabidka/' . $name . '.php')) {
        $path = './html/nabidka/' . $name . '.php';
    } 
    elseif (file_exists($cesta)) {
        $path = $cesta;



tak array je fuč, měl jsem tam nesmyslně znovu echo


strašně se omlouvám za spam, ale prosím jen poradit jak to mám zapsat, vypadá to, že příkazy jsou správně a směrování funguje, php se učim a vůbec nevim jak vložit další podmínku, představoval jsem si to takto, ale samozřejmě to nefunguje, jedná se o část if($result..... jak to mám zapasovat do kodu, když bude splněna podmínka tak bude pokračovat elseif jinak skočí na else?
<?php  
  $path = './html/nabidka/pily_hobby.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('./html/nabidka/' . $name . '.php')) {
        $path = './html/nabidka/' . $name . '.php';
    }
    $slozka= glob('./html/nabidka/*/'.$name. '.php');
    $result = count ($slozka);
    if ($result!=0){ 
    $cesta = $slozka[0]; }
     
    elseif (file_exists($cesta)) {
        $path = $cesta;
    }else {
        $path = './html/404.php';
         // chybová stránka pokud uživatel leze na stránku která neexistuje
    }
}

include $path;


?> 
abc
Profil
if ($result > 0)
crooner
Profil *
tak znaménkem to není
crooner
Profil *
jak to ma prosim vypadat?aby se to zpracovalo v te posledni podmince?je pro me dulezite se to naucit,ale nikde to nemohu najit.
abc
Profil
Takto?
if ($result > 0 && file_exists($slozka[0])) {
    include $slozka[0];
  } else {
    include './html/404.php';
}
crooner
Profil *
to prerusim prvni podminku
abc
Profil
to prerusim prvni podminku
Co to znamená česky?
Alphard
Profil
abc [#14]:
Pokud vím glob() nevrací fiktivní výsledky, existenci souboru není třeba znovu testovat.

crooner:
Vycházím z kódu [#10], jinak jsem v tom už ztracen. Podle mě elseif nepotřebujete, viz odpověď pro abc, pokud se něco našlo, soubor existuje a můžete hned kopírovat do $path.
crooner
Profil *
Ok děkuji Vám moc.
abc
Profil
Alphard:
občas by to chtělo používat mozek :-)

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: