Schleife nach drei Durchläufen abbrechen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
anzeigen
bild
break
code
dank
datei
fehler
file
haut
image
info
jemand
kommentar
methode
nennen
ordner
text
url
verzeichnis
-
Servus,
Ich habe folgende Funktion, die mir Bilder aus Bilderordnern ausliest:
function recdir($dir) { $handle = opendir($dir); while ($file = readdir($handle)) { if ($file != "." && $file != "..") { // Datei ist ein Verzeichnis if (is_dir($dir.$file)) { echo "<a href=\"../bilder/".$file."\"><h1>".$file."</h1></a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."\" style=\"margin-right: 7px;\">Gesamte Gallerie anzeigen</a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."#comment\">Kommentare anzeigen</a>"; echo "<br><br>"; include("images/".$file."/text.txt"); echo "<br><br>"; recdir($dir.$file.'/'); } // Datei ist kein Verzeichnis else {$i=0; if($i<3){ $i++; // Bildinfos ermitteln (Breite, Höhe) $info = getImageSize($dir.$file); // Breitbild anzeigen if($info[0]>$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"150px\" height=\"113px\" alt=\"\"></a>"; } if($info[0]<$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"85px\" height=\"113px\" alt=\"\"></a>"; return;}else{} } } } } closedir($handle); }
Allerding möchte ich nicht, dass alle Bilder eines Ordners ausgelesen werden, sondern dass nur fünf Bilder aus jedem Ordner angezeigt werden.
Deshalb muss ich die Schleife eig. nach fünf durchgängen stoppen oder die Bilder in einen Array einlesen.
Weiß jemand die Lösung auf mein Problem?
Danke im Vorraus,
Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
$i = 0; while ($file = readdir($handle) && $i < 5) { $i ++;
bricht also nach fünf Durchläufen ab... -
@ole-reglitz: `&&` hat eine höhere Precedance als `=` also würde dein Code als `$file = (readdir($handle) && $i < 5)` ausgeführt werden. Beheben kannst du es, indem du entweder die Anweisungen umdrehst (was hier effizienter ist) oder Klammern setzt:
$i = 0; while ($i++ < 5 && $file = readdir($handle)) { // code
-
Danke euch beiden, tut leider in beiden Ausführungen nicht!
Bei der Lösung von ole-reglitzki werden gar keine Bilder angezeigt.
Bei der Lösung von nikic sieht mein Code dann so aus:
function recdir($dir) { $handle = opendir($dir); $i = 0; while ($i++ < 5 && $file = readdir($handle)) { if ($file != "." && $file != "..") { // Datei ist ein Verzeichnis if (is_dir($dir.$file)) { echo "<a href=\"../bilder/".$file."\"><h1>".$file."</h1></a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."\" style=\"margin-right: 7px;\">Gesamte Gallerie anzeigen</a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."#comment\">Kommentare anzeigen</a>"; echo "<br><br>"; include("images/".$file."/text.txt"); echo "<br><br>"; recdir($dir.$file.'/'); } // Datei ist kein Verzeichnis else {$i=0; if($i<3){ $i++; // Bildinfos ermitteln (Breite, Höhe) $info = getImageSize($dir.$file); // Breitbild anzeigen if($info[0]>$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"150px\" height=\"113px\" alt=\"\"></a>"; } if($info[0]<$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"85px\" height=\"113px\" alt=\"\"></a>"; return;}else{} } } } } closedir($handle); }
oder ist da was falsch?
und damit ist alles wie davor - außer dass beim letzten Bilderordner nur noch 3 Bilder angezeigt werden: http://fabian-riedel.lima-city.de/bilder.
Hat jemand noch ne andere Lösung?
Fabi -
sosehr nikic mich wieder haut, so sehr poste ich es auch^^
probiers mal hiermit:
$=0 while (($i < 5) && ($file = readdir($handle))) { i++;
also mit geklammerten bedingungen. wenn das aber auch nich funzt was ich mir nu garnich vorstellen kann, dann machs über die schlimme methode:
$i=0; while ($file = readdir($handle) { $i++; if ($i>=5) {break;} //Dein sonstiger Code }
es ist ganz böse, ich weiß, break und continue soll man nich so benutzen, aber wenn der andere kram nich funktioniert ist dashier zumindest eine temporäre lösung -
Du könntest bevor du ggamees Methode probierst auch erstmal die Fehler beheben:
Zuerst einmal benutzt du $i doppelt. Einmal hast du es schon am Anfang benutzt und jetzt hast du es nochmal zusätzlich eingebaut.
Also solltest du dein neues $i vllt lieber $j nennen^^.
Weiterhin machst du den Fehler und erhöhst dein $i nicht (außer im else-Zweig).
Also müsste das ganze eher so aussehen (ungetestet):
function recdir($dir) { $handle = opendir($dir); $j= 0; while ($j++ < 5 && $file = readdir($handle)) { if ($file != "." && $file != "..") { // Datei ist ein Verzeichnis if (is_dir($dir.$file)) { echo "<a href=\"../bilder/".$file."\"><h1>".$file."</h1></a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."\" style=\"margin-right: 7px;\">Gesamte Gallerie anzeigen</a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."#comment\">Kommentare anzeigen</a>"; echo "<br><br>"; include("images/".$file."/text.txt"); echo "<br><br>"; recdir($dir.$file.'/'); } // Datei ist kein Verzeichnis else {$i=0; if($i<3){ $i++; // Bildinfos ermitteln (Breite, Höhe) $info = getImageSize($dir.$file); // Breitbild anzeigen if($info[0]>$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"150px\" height=\"113px\" alt=\"\"></a>"; } if($info[0]<$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"85px\" height=\"113px\" alt=\"\"></a>"; return;}else{} } } } $j++; } closedir($handle); }
Ich hoffe ich habe mich nicht bei den Klammern verzählt... -
keine Fragen stellen, sondern einfach übernehmen:
function recdir($dir) { $handle = opendir($dir); $i = 0 while ($i < 0 && $file = readdir($handle)) { if ($file != "." && $file != "..") { // Datei ist ein Verzeichnis if (is_dir($dir.$file)) { echo "<a href=\"../bilder/".$file."\"><h1>".$file."</h1></a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."\" style=\"margin-right: 7px;\">Gesamte Gallerie anzeigen</a>"; echo "<a class=\"btn green\" href=\"../bilder/".$file."#comment\">Kommentare anzeigen</a>"; echo "<br><br>"; include("images/".$file."/text.txt"); echo "<br><br>"; recdir($dir.$file.'/'); } // Datei ist kein Verzeichnis else {$i=0; if($i<3){ $i++; // Bildinfos ermitteln (Breite, Höhe) $info = getImageSize($dir.$file); // Breitbild anzeigen if($info[0]>$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"150px\" height=\"113px\" alt=\"\"></a>"; } if($info[0]<$info[1]){ echo "<a rel=\"colorbox\" href=\"".$dir.$file."\">"; echo "<img class=\"gallery\" style=\"margin: 10px;\" src=\"/thumbnails/".$dir.$file."\" width=\"85px\" height=\"113px\" alt=\"\"></a>"; return;}else{} } $i++; } } } closedir($handle); }
-
loadi schrieb:
Zuerst einmal benutzt du $i doppelt. Einmal hast du es schon am Anfang benutzt und jetzt hast du es nochmal zusätzlich eingebaut.
Stimmt! Das ist mir garnicht aufgefallen. Das untere war unnötig und deshalb hat es nicht funktioniert.
Jetzt wo der Fehler ausgebessert ist tut nikics Methode auch.
Danke euch für die Antworten
Fabi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage