Bildergalerie mit PHPEine Bildergalerie von Hand zu erzeugen ist oft mühsehlig. Mit einer kleinen PHP Funktion und einer MySQL Tabelle können Sie das ganze auch um einiges einfacher gestalten.

Die Informationen, welche Bilder angezeigt werden sollen, kommen aus einer mySQL Tabelle. Die Struktur ist denkbar einfach:

ID bild text
1 1.jpg Text 1
2 2.jpg Text 2
3 3.jpg Text 3
4 4.jpg Text 4
5 5.jpg Text 5
6 6.jpg Text 6

Diese Tabelle wird über folgende SQL Syntax angelegt:

CREATE TABLE galerie (
ID mediumint(8) unsigned NOT NULL auto_increment,
bild varchar(10) DEFAULT '0' NOT NULL,
text varchar(100),
PRIMARY KEY (ID)
);


Das Herzstück ist die Funktion query_into_array(). Diese Funktion holt die Daten aus der Tabelle und schreibt sie in ein zweidimensonales Array. Dabei enthält die erste Dimension den Datensatz während die zweite Dimension ein assoziatives Array mit den einzelnen Feldern enthält.
Der Aufbau des Arrays sieht also in etwa so aus:

$erg[ID][bild]

$erg[ID][text]

Die Funktion query_into_array()

<?php
function query_into_array($query){
settype($retval,"array");
$resultmysql_query($query);
$y=mysql_num_rows($result);
$k=mysql_num_fields($result);
  for(
$i=0;$i<$y;$i++){
    for(
$j=0;$j<$k;$j++){
    
$retval[$i][mysql_field_name($result,$j)] =
    
mysql_result($result,$i,
mysql_field_name($result,$j));
    }
  }
return 
$retval;
}
?>

Die Funktion bekommt den Query, also die SQL Abfrage übermittelt. Diese wird dann ausgeführt , das Ergebnis wird der Variablen $result zugewiesen $resultmysql_query($query);.
Dann wird die Anzahl der Datensätze über $y=mysql_num_rows($result); ermittelt. Es wird zudem auch noch die Anzahl der Felder eines Datensatzes ermittelt $k=mysql_num_fields($result);.
Über die erste Schleife for($i=0;$i<$y;$i++){ wird die erste Dimension des Arrays durchgeschleift, also die numerische Dimension.
Da der Inhalt davon wiederum ein Array ist, mit den Daten von "bild", und "text", muss das ganze nochmals durchgeschleift werden. Dies geschieht durch die ermittelte Anzahl von Felder eines Datensatzes.
    $retval[$i][mysql_field_name($result,$j)] =
    
mysql_result($result,$i,
mysql_field_name($result,$j));


Dem Array $retval wird in die erste Dimension die ID des Datensatzes gesetzt. Bei der zweiten Dimension muss zunächst der Name des jeweiligen Feldes ermittelt werden mysql_field_name($result,$j)
Darazf wurd der Wert des Feldes dem Array zugewiesen mysql_result($result,$i,mysql_field_name($result,$j));
Am Ende wird das Array $retval zurückgegeben. Nur Vorweg, diese Funktion kann auch für viele andere PHP Anwendungen verwendet werden. Sie ist sehr flexibel.
Wenn Sie diese Funktion verstanden haben, ist der Rest eigentlich kein Problem.
Jetzt läuft das Spiel nur andersherum. Jetzt muss man das Array wieder austeilen, und die einzelnen Werte (also die Bilder) wieder ausgeben. Dazu kann folgender PHP Code dienen.
Nachdem die Daten nun in einem Array vorliegen, besteht der ganze Trick darin, die einzelnen Werte in die entsprechenden Zellen einer HTML-Tabelle zu schreiben:

<?php
$db=@mysql_connect("localhost","","");
@
mysql_select_db("test",$db);

// Daten in ein Array schreiben
$erg=query_into_array("select * from galerie");

// Anzahl der Bilder ermitteln
$y=count($erg);
?>
<TABLE WIDTH="760" CELLSPACING="0">
<? for ($x=0;$x<$y;$x+=5) {?>
  <TR>
    <TD WIDTH="20%">
      <? if($erg[$x][bild]) {?>
      <IMG SRC="<? echo "pics/".$erg[$x][bild?>">
      <? ?>
    </TD>
    <TD WIDTH="20%">
      <? if($erg[$x+1][bild]) {?>
      <IMG SRC="<? echo "pics/".$erg[$x+1][bild?>">
      <? ?>
    </TD>
    <TD WIDTH="20%">
      <? if($erg[$x+2][bild]) {?>
      <IMG SRC="<? echo "pics/".$erg[$x+2][bild?>">
      <? ?>
    </TD>
    <TD WIDTH="20%">
      <? if($erg[$x+3][bild]) {?>
      <IMG SRC="<? echo "pics/".$erg[$x+3][bild?>">
      <? ?>
    </TD>
    <TD WIDTH="20%">
      <? if($erg[$x+4][bild]) {?>
      <IMG SRC="<? echo "pics/".$erg[$x+4][bild?>">
      <? ?>
    </TD>
    </TR>
  <TR>
    <TD WIDTH="20%"><? echo $erg[$x][text?></TD>
    <TD WIDTH="20%"><? echo $erg[$x+1][text?></TD>
    <TD WIDTH="20%"><? echo $erg[$x+2][text?></TD>
    <TD WIDTH="20%"><? echo $erg[$x+3][text?></TD>
    <TD WIDTH="20%"><? echo $erg[$x+4][text?></TD>
  </TR>
  <? ?>
</TABLE>


In der Zeile <? for ($x=0;$x<$y;$x+=5?> wir angegeben, wie viele Bilder pro Tabellenzeile angezeigt werden sollen. Da Sie in jeder Tabellenspalte einen anderen Datensatz anzeigen, geben Sie über den Wert $x+.. den gewünschten Datensatz an. Die zweite Dimension des Array enhält die einzelnen Felder und läßt sich über den Spaltennamen ansprechen.

Auch hier gilt wieder der Grundsatz, ein guter Programmierer probierts einfach aus!
Das Skript gibts auch zum Download.
In der Datei "galerie.sql" befindet sich die SQL Anweisung für die Tabelle. Legen Sie diese an, und fügen Sie einfach einige Daten ein. Die Datei "galerie.php" übernimmt dann die Aufgabe des Daten ermittelns, und des Daten ausgebens. Hier müssen Sie die Userdaten für die Datenbank anpassen.

Vielen dank an IT-Studio.net, und an Herrn Arnberger.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: