Bildergalerie mit PHP

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.

This entry was posted in PHP. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *