Bildergalerie in Tabellen aufschlüsseln -> Problem

Black Crow

Mitglied
Hi

ich erstelle zur Zeit eine Bildergalerie, wo man auf die Bilder klicken kann und unten in einem "IMG-Tag" fürs Forum (BBCode) der Code erscheinen soll.

Das gibts noch nicht, weil ich erst alles nach und nach haben möchte. Jetzt ist mein Problem, dass ich das in einer Tabelle haben möchte, 3 Bilder pro Reihe in vielleicht 5 Zeilen. Wie kann ich das verwirklichen?

Hier die Seite:
http://www.hundelaut.de/pics/


Der Code, der die Bilder aufruft:
PHP:
    <?        $result = mysql_query("SELECT * FROM pics_bilder WHERE rubrik_id='$rubrik_id' ORDER BY picid"); 
            echo mysql_error();
            while ($row = mysql_fetch_array($result)) {
                
        ?>

    

          <tr> 
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[datei_n]\">"; ?></td>
            <td class="tableb"><? echo "<img src=\"$hp_url/$row[datei_n]\">"; ?></td>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[datei_n]\">"; ?></td>
          </tr>
<?
    }
?>


$hp_url wird definitiert, ist aber nicht jetzt in dem Auszug mit rein kopiert ;)

LG
Black Crow
 
PHP:
$offset = 0; // erster Ergebniseintrag
$limit = 15; // 5 mal 3 Bilder = 15

$result = mysql_query("SELECT * FROM pics_bilder WHERE rubrik_id = '$rubrik_id' ORDER BY picid LIMIT {$offset},{$limit};");

// WENN fehler, DANN ausgeben, ansonsten nichts ausgeben (sonst steht irgendwann ne hässliche 0 da ;)
if (mysql_errno() > 0) {
    echo mysql_error();
}

// Zähler
$i = 0;

// besser assoziatives Array abfangen statt ein Array mit assoziativen UND numerischen Werten (doppelte Datenmenge, aber nur einfacher Nutzen)
while ($row = mysql_fetch_assoc($result)):
    // Zähler inkrementieren
    ++$i;

    // wenn (($i + 3) % 3) == 2, also Rest aus 1 / 1 == 0
    // neue Tabellenzeile und Tabellenzelle
    if ($i % 1 == 0):
?>
          <tr>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // zweite Spalte?
    elseif (($i + 3) % 3 == 2):
?>
            <td class="tableb"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // dritte Spalte?
    else:
?>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
          </tr>
<?php
    endif;
endwhile;
// schließe eventuell offene Tabellenreihe
if ($i % 3 != 0):
?>
          </tr>
<?php
endif;
?>

Insgesamt ist das auch noch nicht perfekt, da die Datenbankabfrage recht Fehleranfällig ist und die Ausgabe auch nicht so dolle ist, aber insgesamt dürfte das doch eher deinen Erwartungen entsprechen. Falls noch Fragen sind, was was bewirkt und warum, dann bitte einfach nachhaken. Hab momentan nen vollen Kopf und weiß daher nicht so recht, ob ich es ausreichend erklärt habe.
 
Mh, rein mathematisch sollte es korrekt sein:
Wenn der Rest aus dem Zähler (+3 um Fehler mit negativen Resultaten zu vermeiden) durch 3 2 ist, sollte es die erste Zeile sein, etc
Code:
01.   4 % 3 = 1
02.   5 % 3 = 2
03.   6 % 3 = 0
04.   7 % 3 = 1
05.   8 % 3 = 2
06.   9 % 3 = 0
...

Oder stehe ich auf dem Schlauch? :confused:

Oh my... Okay, Fehler erkannt:
PHP:
<?php
$offset = 0; // erster Ergebniseintrag
$limit = 15; // 5 mal 3 Bilder = 15

$result = mysql_query("SELECT * FROM pics_bilder WHERE rubrik_id = '$rubrik_id' ORDER BY picid LIMIT {$offset},{$limit};");

// WENN fehler, DANN ausgeben, ansonsten nichts ausgeben (sonst steht irgendwann ne hässliche 0 da ;)
if (mysql_errno() > 0) {
    echo mysql_error();
}

// Zähler
$i = 0;

// besser assoziatives Array abfangen statt ein Array mit assoziativen UND numerischen Werten (doppelte Datenmenge, aber nur einfacher Nutzen)
while ($row = mysql_fetch_assoc($result)):
    // Zähler inkrementieren
    ++$i;

    // wenn (($i + 3) % 3) == 2, also Rest aus 1 / 3 == 1
    // neue Tabellenzeile und Tabellenzelle
    if (($i + 3) % 3 == 1):
?>
          <tr>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // zweite Spalte?
    elseif (($i + 3) % 3 == 2):
?>
            <td class="tableb"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // dritte Spalte?
    else:
?>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
          </tr>
<?php
    endif;
endwhile;
// schließe eventuell offene Tabellenreihe
if ($i % 3 != 0):
?>
          </tr>
<?php
endif;
?>

Hab mich im ersten Beispiel zuerst ein wenig vertan und dann vergessen, die erste if-Anweisung zu korrigieren.
 
Hi,

danke dir.

soweit funktioniert alles. Kann man es jetzt noch so machen, dass in den Zellen, wo nix drinnen steht, das Tablea bzw. Tableb erscheint, als leere Spalte? Wie sähe da die IF aus?

LG
Black Crow
 
Das geht ganz leicht, in dem man noch eine Schleife einbaut, die so lange Zellen einfügt, bis die Reihe voll ist (Abbruchbedingung sollte klar sein ;) )

PHP:
<?php
$offset = 0; // erster Ergebniseintrag
$limit = 15; // 5 mal 3 Bilder = 15

$result = mysql_query("SELECT * FROM pics_bilder WHERE rubrik_id = '$rubrik_id' ORDER BY picid LIMIT {$offset},{$limit};");

// WENN fehler, DANN ausgeben, ansonsten nichts ausgeben (sonst steht irgendwann ne hässliche 0 da ;)
if (mysql_errno() > 0) {
    echo mysql_error();
}

// Zähler
$i = 0;

// besser assoziatives Array abfangen statt ein Array mit assoziativen UND numerischen Werten (doppelte Datenmenge, aber nur einfacher Nutzen)
while ($row = mysql_fetch_assoc($result)):
    // Zähler inkrementieren
    ++$i;

    // wenn (($i + 3) % 3) == 2, also Rest aus 1 / 3 == 1
    // neue Tabellenzeile und Tabellenzelle
    if (($i + 3) % 3 == 1):
?>
          <tr>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // zweite Spalte?
    elseif (($i + 3) % 3 == 2):
?>
            <td class="tableb"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
<?php
    // dritte Spalte?
    else:
?>
            <td class="tablea"><? echo "<img src=\"$hp_url/$row[dateiname]\">"; ?></td>
          </tr>
<?php
    endif;
endwhile;
// schließe eventuell offene Tabellenreihe
if (($i + 3) % 3 != 0):
    // hier eine Schleife
    while (($i + 3) % 3 != 1):
        // wenn Rest aus $i / 2 gleich 0 (also $i gerade) ist, dann setze "tableb" ein, ansonsten "tablea"
?>
            <td class="<?php echo (($i % 2 == 0) ? 'tableb' : ' tablea'); ?>"></td>
<?php
    endwhile;
          </tr>
<?php
endif;
?>
 
Hi

danke dir noch mal, das funktioniert leider auch nicht :( Ich hätte das ganze anders gebastelt und bei meinem Dusel hätte es eh nie get.

LG
Black Crow
 
Zurück