Bilder auslesen und in eine Tabelle schreiben

Despoiler

Erfahrenes Mitglied
Hallo zusammen,

ich hab folgende Zeilen Code und will aus meiner DB die Links zu einzelnen Bildern auslesen und diese in eine Tabelle übergeben.

Ich möchte dass er eine Zeile mit 4 Bildern auffüllt, dann einen Umbruch macht und die restlichen Bilder in die nächsten Zeilen schreibt.
Bin noch recht neu in Sachen PHP, es gibt bestimmt eine elegantere Lösung, doch ich möchte es erstmal so probieren.

Bin für jede Hilfe dankbar.

Grüße, Despoiler

PHP:
<?
include_once("inc/db.inc.php");  	
$result = mysql_query("SELECT * FROM images ORDER BY id desc;");  
?>  	
				  			
<table align="center" border="0" cellpadding="0" cellspacing="5">  

<?  	
while ($row = mysql_fetch_array($result)) {  				
echo "<tr>";   				
if ($i <= 4) {  					
echo "<td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td>";
}  
echo "</tr>";
} else ($i > 5) {  					
echo "<br /><td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td>";
}  				
echo "</tr>";   	
}  			
?>  			

</table>
 
Probiers mal damit:
PHP:
 echo '<table align="center" border="0" cellpadding="0" cellspacing="5">';
 for ($i=1;$i<5;$i++)
 {
   while ($row = mysql_fetch_array($result))
   {  
 	if($i<4)
 	{
 	  if($i==1)
 	  {
 		echo '<tr><td><img src="' . $row["Thumbnail"] . '" width="118" height="118" border="0"></td>';
 	  }
 	  else
 	  {
 		echo '<td><img src="' . $row["Thumbnail"] . '" width="118" height="118" border="0"></td>';
 	  }
 	}
 	if($i==4)
 	{
 	  echo '<td><img src="' . $row["Thumbnail"] . '" width="118" height="118" border="0"></td></tr>';
 	  $i=1;
 	}
   }
 }
 echo '</table>';
Habs nicht getestet!
 
Hallo Despoiler,

irgendwie vermisse ich hier eine Frage...

Trotzdem ein paar Hinweise
- $i ist nicht initialisiert (php ist sowas egal, anderen Programmiersprachen nicht), dadurch ist die Variable am Anfang 0, da Deine if Abfrage auf <= prüft bekommst Du nicht 4, sondern 5 Bilder
- else steht immer alleine, wenn dann müsste es elseif (...) heissen

Was ich immer super für sowas verwenden konnte war die Modulo Operation
Sie liefert Dir den Rest zu einem bestimmten Ergebnis z.B.
1 mod 4 = 0 Rest 1
...
4 mod 4 = 1 Rest 0
5 mod 4 = 1 Rest 1
usw...

auf Deinen Fall angewendet wäre also immer bei Rest 0 eine neue Zeile fällig
Code:
Pseudocode
<table>
  $i = 1 // Initialisierung
  <tr>
  while (...)
    <td>Bild</td> // Bild anzeigen
    $ergebnis = $i % 4; // Modulo-Operation mit 4 auf Zählvariable
    if $ergebnis == 0  // Überprüfe Ergebnis auf Null
      </tr><tr>  // Falls true Zeile abschliessen und neue Zeile beginnen
    endif
  endwhile
  </tr>
</table>
So ich hoffe ich konnte Dir einen kleinen Denkanstoss geben,
Hier noch ein Link zur imo besten PHP Seite php.net

vg Clemens
 
@ JackyD

Dank dir, aber er macht genau das Selbe wie bei meinem Script. ;-]

@ Clemens

Jow danke für die schnelle Erklärung, hab jetzt mal ein wenig rumprobiert und bin zu dem Ergebis gekommen. Bitte nicht lachen, es funtzt immernoch nicht! Was meinste was ich wieder falsch mache...

PHP:
	while ($row = mysql_fetch_array($result)) {
	echo "<table border=\"0\">";
		$i = 1; // Initialisierung
		echo "<tr>"; 
			while ($i <= 3) {
				echo "<td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td>"; // Bild anzeigen
				$ergebnis = $i % 4; // Modulo-Operation mit 4 auf Zählvariable
				if ($ergebnis == 0)  { // Überprüfe Ergebnis auf Null
				echo "</tr><td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td><tr>";   // Falls true Zeile abschliessen und neue Zeile beginnen
			endif
			}
			endwhile
		}
	  	echo "<tr>"; 
	echo "</table>";	
}
 
Hallo nochmal,

nachdem ich zu faul bin Dir den Code fertig zu posten :) und Du ja auch sicher was verstehn willst noch ein paar Tips (und Verbesserungen meinerseits)
  • die endif und endwhile stehen nur da, da es sich nicht um richtigen Code handelt, die müssen im PHP Code natürlich weg
  • In meinem Beispiel fehlt am Ende der While Schleife ein $i++; um $i eins hochzuzählen...sorry
  • Initialisierung von $i muss vor der while Schleife passieren, sonst wird die Variable ja bei jedem Schleifendurchlauf wieder auf 0 gesetzt
  • Wozu hast Du eine zweite while Schleife und was macht sie? Ist sie nötig?
  • In der if Anweisung gibt´s Du nochmal ein Bild aus... warum? Du gibts ein Bild aus - überprüfst, das wievielte es in der Zeile ist - entweder ist Deine modulo Rechnung "!= 0" dann kommt das nächste Bild in die Zeile oder "== 0" dann wird die Zeile abgeschlossen </tr> und eine neue erstellt <tr>...
so ich hoffe das hilft nochmal weiter
vg Clemens
 
Hallo Clemens, ich schlag die Hände über den Kopf zusammen..... :)

zu Punkt a)
Irgendwie liegts mir auf der Zunge bzw. auf den Fingern, aber ich komm nicht drauf.

zu Punkt b)
Wie definierst du am Ende der while-Schleife?

zu Punkt c)
Hat geklappt! Wenistens etwas! :)

zu Punkt d)
Nein die 2. Schleife ist nicht nötig. Hat auch geklappt.

zu Punkt d)
Ich hab mir gerade den Kopf zerbrochen und irgendwie erscheint es logisch, doch mir fehlt der Syntax dafür. Hab deine php.net Seite gerade rauf und runtergespielt! *arg ;-]

anyway, das hab ich bis jetzt fabriziert! das else hab ich zu testzwecken eingebaut.

PHP:
$i = 1; // Initialisierung 
	echo "<table border=\"0\">"; 
		echo "<tr>"; 
			while ($row = mysql_fetch_array($result)) { 
			echo "<td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td>"; // Bild anzeigen 
			$ergebnis = $i % 4; // Modulo-Operation mit 4 auf Zählvariable 
			if ($ergebnis == 0)  { // Überprüfe Ergebnis auf Null 
		echo "</tr>";   // Falls true Zeile abschliessen und neue Zeile beginnen 
			
			} else {
				
		echo "<tr>";
			echo "<td><img src=\"" . $row["Thumbnail"] . "\" width=\"118\" height=\"118\" border=\"0\"></td>";
		echo "</tr>";
			} 
		 }
	echo "</table>";
 
Hehe... na bist doch scho a Stück weiter gekommen... ist doch subba!
Das else ist nicht nötig, das $i++ gehört an die letzte Stelle der While-Schleife. Dadurch wird $i immer am Ende des Schleifendurchlaufs um 1 hochgezählt.
Code:
<?
$i = 1; // Initialisierung
echo "<table border=\"0\"><tr>";

while ($row = mysql_fetch_array($result)) {
    echo "<td>Bild</td>"; // Bild anzeigen
    $ergebnis = $i % 4; // Modulo-Operation mit 4 auf Zählvariable
    
    if ($ergebnis == 0)  { // Überprüfe Ergebnis auf Null
        echo "</tr><tr>";   // Falls true Zeile abschliessen und neue Zeile beginnen
    }
    $i++;
}
echo "</tr></table>";
?>
vg Clemens
 
Hehe, es klappt Clemens!

Dein endif und endwhile haben mich ganz schön verrückt gemacht! :)

Ich dank dir recht schön, mein nächstes Problem kommt bestimmt!

Bis denn ;)
 
Zurück