Was ist an diesem Script "Ordner auslesen" falsch?!

Falloutboy6

Mitglied
Hi,

ich habe folgendes Script. Hier habe ich das Problem, dass er das erste Bild (da er ja alphabetisch sortiert) also zb. a.jpg immer weglässt. Das zweite geht dann aber immer dass, dass als erstes ausgelesen wird wird nicht angezeigt. Woran könnte das liegen?

Bitte um Hilfe. Danke

PHP:
 <?
echo "<table align=\"center\" width=\"150\" height=\"100\" border=\"0\" cellpadding=\"3\" cellspacing=\"3\">"
    ."<tr>";
$the_file_array = Array();
$the_folder_array = Array();
$verzname="images/galerie/thumb";
$handle = opendir($verzname);
 
 
 
   while($file = readdir($handle))
{
    if ($file != "." && $file != ".." && $file != "index.php") {
     $the_file_array[] = $file; } else if (filetype($file) == "dir") {$the_folder_array[] = $file;
 }
   }
 
closedir($handle);
sort ($the_file_array);
reset ($the_file_array);
next($the_file_array);  
sort ($the_folder_array);
reset ($the_folder_array);
next($the_folder_array);  
 
while (list ($key, $val) = each ($the_file_array)) {
   if (($val != ".") && (!fnmatch("*.htm*", $val)) && (!fnmatch("*.php*", $val))){
       if ((fnmatch("*~~*", $val)) || (fnmatch("~cheat_sux^hi", $val))) {
           // CASE: An outcommented file. - Syn: "~<filename>" - Exp: "~nottobeseen.txt"
           echo "** SECRET FILE **<br>";
       }else{
               echo "<td align=\"center\" width=\"300\">"
            ."<a href=\"images/auslesen.php?Bild=$key\" onclick=\"return popup(this,134,88)\"><img src=".$verzname."/".$val." width=\"120px\" border=\"0\"></a>\n"
            ."</td>".substr_replace($datei, "", +50)."\n";
 
 
            $i++;
    }
    if($i%5==0 && $i!=1) {
        echo "</tr><tr>\n";
    }
}
           }
           echo "</tr></table><br>";
?>
 
Hi,

danke etz liest er es aus. Nur etz noch ein Problem. Ich lese doch noch bei dem link hinten ?Bild=$key aus.

Jetzt macht er beim ersten Bild eine 0 da müsste aber eine 1 hin.

Was muss ich da noch ändern.

Danke
 
In der Variable $key steht ja jeweils der Key vom Array. Und Array Keys fangen bei 0 an...

Also wenn der erste eintrag im Array Bild=1 haben soll, der zweite Bild=2 usw, dann machs doch so:

PHP:
$key = 1;
foreach ($the_file_array as $val) {
  /*** Dein Code ***/

  echo "<td align=\"center\" width=\"300\">"
            ."<a href=\"images/auslesen.php?Bild= " . $key++ . "\" onclick=\"return popup(this,134,88)\"><img src=".$verzname."/".$val." width=\"120px\" border=\"0\"></a>\n"
            ."</td>".substr_replace($datei, "", +50)."\n";

  /*** Dein Code ***/
}

Gruss
X
 
Hi,

hört sich logisch an, doch etz zeigt er mir garkein Bild mehr an. Was habe ich falsch gemacht? Sorry für meine dussligkeit :(


PHP:
 <?
echo "<table align=\"center\" width=\"150\" height=\"100\" border=\"0\" cellpadding=\"3\" cellspacing=\"3\">"
    ."<tr>";
$key = 1;
foreach ($the_file_array as $val) {
$the_file_array = Array();
$the_folder_array = Array();
$verzname="images/galerie/thumb";
$handle = opendir($verzname);

  while($file = readdir($handle))
{
    if ($file != "." && $file != ".." && $file != "index.php") {
     $the_file_array[] = $file; } else if (filetype($file) == "dir") {$the_folder_array[] = $file;
 }
   }

closedir($handle);
sort ($the_file_array);
reset ($the_file_array);
sort ($the_folder_array);
reset ($the_folder_array);

while (list ($key, $val) = each ($the_file_array)) {
   if (($val != ".") && (!fnmatch("*.htm*", $val)) && (!fnmatch("*.php*", $val))){
       if ((fnmatch("*~~*", $val)) || (fnmatch("~cheat_sux^hi", $val))) {
           // CASE: An outcommented file. - Syn: "~<filename>" - Exp: "~nottobeseen.txt"
           echo "** SECRET FILE **<br>";
       }else{
               echo "<td align=\"center\" width=\"300\">"
            ."<a href=\"images/galerie/auslesen.phpBild= " . ++$key . "\" onclick=\"return popup(this,134,88)\"><img src=".$verzname."/".$val." width=\"120px\" border=\"0\"></a>\n"
            ."</td>".substr_replace($datei, "", +50)."\n";
            
            
            $i++;
    }
    if($i%5==0 && $i!=1) {
        echo "</tr><tr>\n";
    }
}}
           }
           echo "</tr></table><br>";
?>
 
Den foreach() den ich dir empfohlen habe musst du nicht um das ganze machen, sondern einfach deine zweite Whileschleife dadurch ersetzen :)

Wieso geht jetzt nicht? Die foreach() fragt ab, ob es in $the_file_array einen Wert hat. Wenn ja, dann nimm in und speichere sie in $val. Und dies macht es für jeden Wert in $the_file_array.
Wenn es aber in $the_file_array kein Wert hat, dann wird alles in der foreach() gar nicht ausgeführt. Und da es $the_file_array noch gar nicht kennt, wird dein ganzer Code gar nicht ausgeführt. Verstanden? :)

Gruss
X
 
Verstanden super danke geht. nun noch ein problem.

Meine Ordnerstruktur

images -> galerie -> thumb

wenn ich jetzt bilder aus dem Ordner galerie auslesen erkennt er den Ordner thumb auch als Objekt an. Wie kann ich diesen abblocken. Bei PHP Dateien geht es ja zb so.

PHP:
(!fnmatch("*.php*", $file))

Wie geht das mit Ordnern?

Danke euch
 
Bis jetzt ist es ja so, dass alles ausser '.', '..' und 'index.php' im array $the_file_array (dämlicher name übrigends ^^) gespeichert sind. Also auch alle Folders, die ja warscheinlich in $the_folder_array (ach dämlich :P ^^) gespeichert werden sollen oder?

Mach mal so:
PHP:
while($file = readdir($handle))
{
	if ($file != "." && $file != ".." && $file != "index.php") {
		if (is_dir($file)) {
			$the_folder_array[] = $file;
		} else {
			$the_file_array[] = $file;
		}
	}
}

Also mal wieder ., .. und index.php ignorieren. Dann fragen ob es ein Directory ist. Wenn ja, dann in $the_folder_array schreiben. Sonst in $the_file_array.
Da thumb ein Ordner ist, wird dieser dann nicht mehr aufgelistet sein :)

Gruss
X
 
Danke. Es geht aber leider in diesem Fall nicht um diese Script sondern um folgendes

PHP:
 $Bilder = array();
 $Pfad = "./" . $_GET['kat'] . "/";
 $handle = opendir($Pfad);
 
 while ($file = readdir ($handle)){ 
  if (($file != "." && $file != "..") && (!fnmatch("*.htm*", $file)) && (!fnmatch("*.html*", $file)) && (!fnmatch("*.php*", $file)) && (!fnmatch("*_th.jpg*", $file))){ 
   $Bilder[] = $file;
  } 
 } 
 closedir($handle);
 
 if(isset($_GET['Bild'])){
  $Bild = $_GET['Bild'];
 }else{
  $Bild = 1;
 }

Danke für deine Hilfe :)
 
Zurück