Schleifenproblem
Carl
- php
Hallo und frohe Weihnachten,
das Jahr ist fast um und ich habs immer noch nicht auf die Reihe gekriegt Schleifen völlig hinzubekommen. Und hier kommt das neueste Problem: Ich versuche mich gerade an einem Script für eine Galerie. Auf einer Seite sollen 9 Bilder angezeigt werden, immer 3x3. Die Galerie wird durch Datenbankeinträge gespeißt.
Wenn ich weniger als 9 Bilder zur Verfügung habe, sollen einfach nur leere Tabellenzelen erzeugt werden, damit eine Art Schachbrett erzeugt wird.
Aber aus irgend einem Grund klappt das nicht so ganz.
Hier mal ein Ausschnitt vom Code, den ich zur Erzeugung der Tabellenspalten verwende:
echo "<tr>";
$i = $eintraege;;
while($row = mysql_fetch_assoc($pics))
{
$i--;
echo "<td class="tables" width="150" valign="top" align="left"><img width="100" height="100" src="".$row['bilder_url'].""></td>";
$spalte++;
if($spalte >= 3)
{
echo"</tr><tr>";
$spalte = 0;
}
}
for($n=$i; $n<=eintraege; $n++)
{
echo "<td><br></td>";
$teiler = $n/3;
if(is_int($teiler))
{
echo"</tr><tr>";
}
}
echo "</tr>";
Und hier noch der Link zu der Seite, auf der das ganze laufen soll: http://abi2000.freie-geister.de/index.php?page=pictures.
Wäre für alle Denkanstöße/Ideen dankbar. Und wenn Ihr auch noch was zum Design sagt, wäre es noch schöner ;)
Gruss
Carl
Leider reicht dein Codebeispiel nicht ganz, weil z.B. nicht ersichtlich ist wo und wie die Variable $eintraege initialisiert wird.
Allerdings habe ich mal vorneweg 2 anmerkungen:
1. In deiner for schleife fehlt vor eintraege ein $:
for($n=$i; $n<=eintraege; $n++)
das sollte for($n=$i; $n<=$eintraege; $n++) heissen nehm ich mal an
2. Ich habe mir mal den HTML-Sourcecode deiner Page angeschaut und dabei ist mir spontan aufgefallen, daß 2 öffnende <table> tags fehlen.
Hello Carl,
fange ich doch mit der offenen Frage an:
Willst Du die Seiten dann später auch durchblättern?
Trenne das Ausgabetemplate und die Bereitstellungsfunktion voneinander.
function hole_bilder($con, $table, &$offset, $limit)
{
$sql = "Select bild_url from $table order by id limit $offset, $limit";
$res = mysql_query($sql, $con);
if (!$res) retrun false;
$_ret = array();
while ($_ret[] = mysql_fetch_assoc($res);
$offset += mysql_num_rows($res);
return $_ret;
}
function put_bild_url($_addr,$nummer)
{
$url = "";
if (isset($_addr[$nummer])
{
$url = "<img src="".$_addr[$nummer]."\ />";
}
return $url;
}
<?php
# Buttonabfragen bitte selber bauen
# vorwärts:
$offset = intval($_POST["offset"]);
#rückwärts:
$offset = intval($_POST["offset"]-$limit);
if ($offset < 0) $offset = 0;
$_pics = hole_bilder($con, "BILDER", $offset, $limit);
?>
<!-- den ganzen Doctype-Quatsch nicht vergessen -->
<form ...>
<table class="bildergrid">
<tr>
<td><?php echo put_bild_url($_pics,0); </td>
<td><?php echo put_bild_url($_pics,1); </td>
<td><?php echo put_bild_url($_pics,2); </td>
</tr>
<tr>
<td><?php echo put_bild_url($_pics,3); </td>
<td><?php echo put_bild_url($_pics,4); </td>
<td><?php echo put_bild_url($_pics,5); </td>
</tr>
<tr>
<td><?php echo put_bild_url($_pics,6); </td>
<td><?php echo put_bild_url($_pics,7); </td>
<td><?php echo put_bild_url($_pics,8); </td>
</tr>
</table>
<!-- hier Steuerungsbuttons und hidden-Variable für offset -->
</form>
Ich habs jetzt nur eben sachnell für Dich zusammengenagelt. Noch keine Fehler beseitigt. Aber so müsste das funktionieren.
Natürlich kannst Du auch die bild-URL und die eines Großformates abholen. dann brauchst Du nur das Query zu ändern und eine weitere Funktion für put_big_bild_url() zu schreiben. Daraus baust Du dann einen Link hinter das Vorsschaubild...
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Hello Carl,
sind doch noch einige Fehler drin im Script. Die letzte Version findets Du unter http://bitworks.de/~selfHTML/bildgalerie.php.txt
function put_bild_url($_addr,$nummer,$field="bild_url")
{
$url = "";
if (isset($_addr[$nummer][$field])
{
$url = "<img src="".$_addr[$nummer][$field]."" />";
}
return $url;
}
...
<table class="bildergrid">
<tr>
<td><?php echo put_bild_url($_pics,0); ?></td>
<td><?php echo put_bild_url($_pics,1); ?></td>
<td><?php echo put_bild_url($_pics,2); ?></td>
</tr>
<tr>
<td><?php echo put_bild_url($_pics,3); ?></td>
<td><?php echo put_bild_url($_pics,4); ?></td>
<td><?php echo put_bild_url($_pics,5); ?></td>
</tr>
<tr>
<td><?php echo put_bild_url($_pics,6); ?></td>
<td><?php echo put_bild_url($_pics,7); ?></td>
<td><?php echo put_bild_url($_pics,8); ?></td>
</tr>
</table>
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom
habs jetzt "auf meine Art" geschafft dass es läuft:
echo "\n <tr>";
$i = $eintraege;
while($row = mysql_fetch_assoc($pics))
{
$i--;
echo "\n <td class="bilder" valign="middle" align="center">\n <img border="0" width="100" height="100" src="".$row['bilder_url']."">\n </td>";
$spalte++;
if($spalte >= 3)
{
if($zeile != 2)
{
echo"\n </tr>\n <tr>";
$spalte = 0;
$zeile++;
}
}
}
for($n=$eintraege-$i; $n<=$eintraege-1; $n++)
{
$teiler = $n/3;
if(is_int($teiler) && $teiler != 0 && $teiler != 3)
{
echo"\n </tr>\n<tr>";
}
echo "\n <td class="bilder" valign="middle" align="center">\n <br>\n</td>";
}
echo "\n </tr>";
$eintraege ist früher im script als 9 definiert, eine Blätterfunktion ist auch schon eingebaut.
Gruss
Carl