Bilder in feste Tebellenstruktur einbinden

uwee

Erfahrenes Mitglied
Hallo!

Ich habe folgendes momentan auf meiner Homepage:
Eine Tabelle, drei Spalten und mehrere Zeilen. Die Tabelle sieht wie folgt aus:
HTML:
<table>
<tr><td>Bild1</td><td>Bild2</td><td>Bild3</td></tr>
<tr><td>Text</td><td>Text</td><td>Text</td></tr>
<tr><td>Bild4</td><td>Bild5</td><td>Bild6</td></tr>
<tr><td>Text</td><td>Text</td><td>Text</td></tr>
...
</table>
und dies wiederholt sich dann immer wieder, bis keine Bilder mehr da sind.
möglich wäre auch diese Darstellung:
HTML:
<table>
<tr><td>Bild1<br>Text</td><td>Bild2<br>Text</td><td>Bild3<br>Text</td></tr>
<tr><td>Bild4<br>Text</td><td>Bild5<br>Text</td><td>Bild6<br>Text</td></tr>
....
</table>

Mein Problem ist folgendes:
Ich will immer drei Bilder nebeneinander haben und ein kurzer Text von 5-6 Wörtern darunter stehen haben. DIe Anzahl der Zeilen richtet sich nach der Menge der Bilder (Anzahl der Wärter / 3).
Wie bekomme ich es nun hin, mit PHP und MySQL die BIlder in diese feste Tabelle einzubauen?
Wenn ich es wie fiolgt mache:
PHP:
echo "<td>",$row->bild,"<br>",$row->text,"</td></tr>\n"
(Tabelle wurde vorher aufgebaut mit <table> usw.
dann habe ich hinterher eine Spalte und zig Zeilen.
Wenn ich es so mache:
PHP:
echo "<td>",$row->bild,"<br>",$row->text,"</td>
<td>",$row->bild,"<br>",$row->text,"</td>
<td>",$row->bild,"<br>",$row->text,"</td></tr>\n"
dürfte er mir dreimal das gleiche Bild mit dem gleichen text in einer Zeile ausgeben, richtig?

Also: Wie bekommen ich es hin, dass die Tabelle so aufgebaut ist, wie ich sie haben möchte. Ich habe das schon oft gesehen, wenn so Gallerys erzeugt wurden, kam jedoch nie an den Quelltext. Auf diesem Wege möchte ich Seiten sparen und praktisch 10 oder mehr Gallerys auf EINER Seite mit vorheriger Auswahl darstellen.

DANKE

Chriss
 
Beim Auslesen prüfst du in deiner while()-Schleife, ob der momentane Wert einer Zählvariablen $i durch 3 teilbar ist (d.h. $i%3 = 0). Wenn dies zutriffst, beginnst du eine neue Zeile. Für den ersten Durchlauf, musst du keine alte Zeile schließen, deshalb benötigst du eine Variable $first, die beim ersten Durchlauf nichts, bei den nächsten allerdings einen Tag zum Abschluss der Zeile schreibt:
PHP:
<?php
    $i = 0;
    $first = "";
    echo "<table>";
    while($row = mysql_fetch_assoc($result)) {
        if(!$i%3) {
            echo $first."<tr>"; #neue Zeile beginnen (und alte abschließen)
            $first = "</tr>";
        }
        echo "<td>".$row["Bild"]."<br>".$row["Text"]."</td>";
        $i++;
    }
    if(!$i%3) { #Zeile ist bereits abgeschlossen
        echo "</tr></table>"; #Zeile und Tabelle schließen
    } else { #Zeile ist noch nicht abgeschlossen, d.h. es fehlen noch Spalten
        echo "<td colspan=\"".($i%3+1)."\">"; #benötigte Spalten hinzufügen
        echo "</tr></table>"; #Zeile und Tabelle schließen
    }
?>
Am Ende wird überprüft, ob noch Spalten fehlen. Wenn das zutrifft, wird eine Spalte mit der Gesamtgröße der fehlenden Spalten eingefügt. Dann kann die Spalte und die Tabelle geschlossen werden.
 
Zuletzt bearbeitet:
DANKE, das mit den Bilder einbinden klappt schonmal und der Text steht auch schön drunter...
aber ich hab in meiner db jetzt VIER Einträge, und eigentlich sollte es dann ja so sein, dass DREI ergebnisse in der ersten Zeile sind und EIN ergebnis in der zweiten Zeile...
es stehen aber alle VIER ergebnisse nebeneinander...
hab ich beim Übernehmen nen Fehler gemacht?:
PHP:
<?php
if(!$result or !mysql_num_rows($result))
echo "Keine Ergebnisse</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Ergebnisse vorhanden</p>";
else {
echo mysql_num_rows($result)," Ergebnisse:</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>Es wurden <b>",mysql_num_rows($result),"</b> Titel mit ähnlichem oder gleichem Suchkriterium gefunden:<hr/>\n";
$i=0;
$first="";
echo"<table>";
while ($row=mysql_fetch_assoc($result)){
if(!$i%3)
{
echo $first."<tr>";
$first = "</tr>";
}
echo "<td><img src=bilder/welt/weimar/".$row["bild"]." width=225 height=115><br>".$row["text"]."</td>";
$i++;
}
if(!$i%3)
{
echo"</tr></table>";
}
else
{
echo "<td colspan=\"".($i%3+1)."\">";
echo "</tr></table>";
}
}
?>

wenn ich alle Bilder in die Datenbank eingebe (53) stehen beim Eergebnis 53 Bilder nebeneinander...
 
Zuletzt bearbeitet:
split hat gesagt.:
Das ist schon mal falsch, man vergleicht so:
PHP:
if($i%3 == 0)
Dann ist der restliche Code auch noch etwas arg umständlich.
Einfacher gehts wenn das 1. <tr> und das letzte </tr> schon fest mit den <table>-Tags geschrieben werden und in die Schleife kommt dann ein
PHP:
($i%3 == 0) ? print "</tr><tr>" : "";
 
wenn ich das nun so schreibe:
PHP:
if(!$i%3==0)
setzt er die Bilder wieder untereinander...
das kann ich auch so...

jeztz brauche ich noch eine Kombination von dem ersten Vorschlag und dem zweiten Vorschlag ;)
 
Ich glaub Du denkst noch viel zu kompliziert, bei meinem Vorschlag brauchts nur einen Vergleich:
PHP:
echo "<table><tr>";
$i=0;
while ($row=mysql_fetch_assoc($result)){
   echo "<td><img src=bilder/welt/weimar/".$row["bild"]." width=225 height=115><br>".$row["text"]."</td>";
   ($i%3 == 0) ? print "</tr><tr>" : "";
   $i++;
}
echo "</tr></table>";
 
kleine Frage zu der Syntax:

es ist egal, ob man für das Teilen
PHP:
%
oder das
PHP:
/
nimmt?!
habs ausprobiert mit demselben Ergebnis.... ist es möglich, dass diese Abfrage nicht richtig ausgeführt wird und einfach überschlagen wird?

WENN ich das
PHP:
 ==0
weglasse, werden die Bilder nebeneinander angezeigt, schreibe ich es hin, werden sie untereiander angezeigt. ABER WARUM?
 
olé, es funktioniert, tja warum einfach wenns auch kompliziert geht :(
DANKE German

EINE kleine Frage hab ich allerdings noch:
Warum ist in der ersten Zeile jetzt nur ein BIld
 
uwee hat gesagt.:
EINE kleine Frage hab ich allerdings noch:
Warum ist in der ersten Zeile jetzt nur ein BIld
Oups ... weil 0/3 == 0, setz $i = 1; dann müßt es gehen.

Zur Erläuterung:
/ = teilen
% = modulus (der Rest einer Ganzzahldivision)
 
Zurück