Autor Zpráva
Herbert
Profil *
Zdravím,

mam několik souborů ve složce generovaných pomocí PHP a na nich mam daný onclick event na otevření nového okna a zobrazení obsahu těchto textových souborů (pomocí PHP include).
Jenže nevím, jak do include napsat cestu k souboru (cestu do složky vím).
Jde nějakým způsobem získat název toho souboru na který je přidán onclick event?

Díky
Str4wberry
Profil
Zajisti to tak, že po kliknutí na soubor se otevře adresa ve stylu „zobrazeni-souboru.php?soubor=slozka/soubor.txt“. Soubor „zobrazeni-souboru.php“ potom jen zajistí přečtení souboru z umístění slozka/soubor.txt (samozřejmě po ověření platnosti adresy).
Herbert
Profil *
Asi jste mě nepochopil...
Mě jde o to, jak dostat do proměný to "soubor.txt", jestliže event onclick mam nastavený v PHP na řetězci, který generuje několik souborů, podle toho v jaké jsem složce. Například soubor.txt, soubor1.lit, soubor2.def, soubor3.ext.
Str4wberry
Profil
Ano, pořádně jsem to nepochopil stále.

Můžeš ukázat živou ukázku? Nebo pospat, co je cílem udělat, co řešíš za problém?
Herbert
Profil *
Živou ukázku bohužel ne, dělám to na interním serveru...

<?php
$dir=$_GET["path"];
  if (!isset($dir)){$dir=$root;}
$last_char=substr($dir, -1);
if(isset($dir)){
 if ($last_char != '/')
    {$dir=$dir.'/';}}
$pole=array();                                        /* deklarujeme prázdné pole pro načítání souborů a složek */
if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle)))        /* procházení adresáře */
    {
        if ($entry != "." && $entry != "..")        /* odstranění . a .. */
           if (is_dir($dir.$entry)==true and is_readable($dir.$entry))        /* je to složka a dá se přečíst ? */
            {
              array_push($pole,"d,".$entry.",".@date ('d.m.Y H:i:s', filemtime($dir.$entry)).",&lt;DIR&gt");
                /* přidej d na začátek, pak název a datum */
            } elseif (is_file($dir.$entry)==true)     /* je to soubor ? */
            {
              $filesize=filesize($dir.$entry);
              if ($filesize < 1024) $b=$filesize.'B';
                elseif ($filesize < 1048576) $b=round ($filesize / 1024, 2).'KB';
                elseif ($filesize < 1073741824) $b=round ($filesize / 1048576, 2).'MB';
                elseif ($filesize < 1099511627776) $b=round ($filesize / 1073741824, 3).'GB';
                else $b=round ($filesize / 1099511627776, 3).'TB';                                      /* převod B na KB/MB/GB/TB */
               if (substr($dir.$entry,-4,1)=="." and stripos($extensions,substr($dir.$entry,-3,3)))     /* zobrazuj jen přípony, které jsou v $extensions (definované v externím souboru) */
                array_push($pole,"f,".$entry.",".@date ('d.m.Y H:i:s', filemtime($dir.$entry)).",".$b);   /*přidej f na začátek, pak název, datum a velikost*/
            }
    }
    closedir($handle);   /* až projdem vše (while již končí, uzavři čtení adresáře */
    /* pole nyní obsahuje několik řetězců, každý odpovídá jedné složce či souboru*/
    }
    sort($pole);  /* setřídí pole dle abecedy - protože řetzce pro složky začínají "d", jsou jako první */ 
echo "<table class='tabulka'>";    
echo "<caption class='title cesta'><div class='titleover'>Nacházíte se ve složce $dir</div></caption>           
      <tr class='title'>                                              
         <th class='name'>Název</th>
         <th class='size'>Velikost</th>
         <th class='lastchange'>Poslední změna</th>
      </tr>";                 /* nadpis a záhlaví tabulky */
$up = preg_replace( '/[^\/]+\/*$/','',$dir );
if  ($dir!==$root)
      {
        echo "<tr>
         <td>
             <img src='css/back_icon.png'><a href='?menu_id=".$menu_id."&submenu_id=".$submenu_id."&path=$up' class='vys'>[ . . ]</a>
         </td>
         <td>&nbsp;</td><td>&nbsp;</td>
        </tr>";
      }
foreach ($pole as $radek)           /* procházíme znovu pole od začátku pro každý $řádek z $pole */
    {
    $polozka=explode(",",$radek);   /* každý řádek rozdělí na položky podle oddělovače (čárky) */
                                    /* položka[0] je první částí - obsahuje buď "d" nebo "f" */
                                    /* polozka[1] je druhou částí, obsahuje název souboru či složky */                                    
                                    /* položka[2] obsahuje datum a čas modifikace souboru */  
                                    /* položka[3] obsahuje velikost souboru nebo údaj o tom, že je to adresář */                             
    echo "<tr><td class='bunka'>";  /* začíná řádek tabulky */
    if ($polozka[0]=="d")           /* pokud je to složka, musí to být červený odkaz */
       {
              echo "<div class='dirover'><img src='css/folder_icon.png'>";
             echo "<a class='directory' href='?menu_id=".$menu_id."&submenu_id=".$submenu_id."&path=".$dir.$polozka[1]."/'>";
             echo $polozka[1];
             echo "</a></div>";
       }
    else                            /* pokud není složka, je to soubor, pak modrý text */
       {
       echo "<div class='fileover'><img src='css/file_icon.png'><a class='file' onclick='odkaz()'>";
       echo $polozka[1];
       echo "</a></div>";
       }
    echo "</td><td class='bunka'>".$polozka[3]."</td>";  
    echo "<td class='bunka'>".$polozka[2]."</td></tr>";   /* v dalším sloupci je datum a čas */
    }  
echo "</table>";
?>

a právě, když dám do includu jen $polozka[1], tak mi to tam nahraje všechny soubory v tý složce...
Keeehi
Profil
A javascriptovou funkci odkaz si máme vycucat z prstu?
isset($dir) bude vždy true, protože $dir je na 2. řádku definované.
Proč to spojuješ na řádcích 15 a 26 do řetězce, aby jsi to následně na řádku 52 rozdělil do pole? Vždyť to můžeš ukládat rovnou do pole.
Nikde tu include není.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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