Hallo zusammen, ich wollte für meine einfach gehaltene Homepage meine Bildergalerie mal etwas verbessern. Da die alte wirklich total quick & dirty ist, habe ich gleich mal angefangen, das Teil neu zu schreiben. Dazu muss ich das ganze "vor und zurück" sowie Anpassung des LIMIT-Arguments im SQL-Statement erstmal verstanden haben. Um das zu schaffen, habe ich mal ein bisschen was probiert und es scheintauch so zu klappen, wie es soll. Bilder usw. werden noch nicht angezeigt, es geht um das Prinzip.
Meine Frage: Gibt es da noch Optimierungspotenzial (ganz bestimmt sogar)? Welches? Komme ich mit einer Abfrage aus? Ich brauche aber ja einmal die 2 bzw. 3 Datensätze und die Gesamtanzahl der Bilder. Vielen Dank schon mal! Hier der Code:
Meine Frage: Gibt es da noch Optimierungspotenzial (ganz bestimmt sogar)? Welches? Komme ich mit einer Abfrage aus? Ich brauche aber ja einmal die 2 bzw. 3 Datensätze und die Gesamtanzahl der Bilder. Vielen Dank schon mal! Hier der Code:
PHP-Code:
<?php
// ------- BEGIN CONSTANTS -------
// Die MySQL-Daten wüsstet ihr wohl gerne :-P
// ------- END CONSTANTS -------
// ------- BEGIN DATABASE CONNECTION -------
// Datenbankverbindung herstellen
$conn = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die("Es konnte keine Verbindung zur Datenbank hergestellt werden.<br>Fehlermeldung: ".mysql_error());
// Datenbank erstellen, wenn nötig
$sql = 'CREATE DATABASE IF NOT EXISTS '.MYSQL_DATABASE;
mysql_query($sql) OR die(mysql_error());
// Datenbank auswählen
@mysql_select_db(MYSQL_DATABASE) OR
die("Die Datenbank konnte nicht ausgewählt werden.<br>Fehlermeldung: ".mysql_error());
// ------- END DATABASE CONNECTION -------
// ------- BEGIN SHOW PICTURES -------
if(isset($_GET['show'])) {
// Gesamtanzahl der Bilder holen
$sql = 'SELECT id, dateiname, beschreibung, eingestellt, views FROM gal_test';
$result = mysql_query($sql) OR die(mysql_error());
$maxRows = mysql_num_rows($result);
echo '<p>Gesamt Anzahl der Bilder: '.$maxRows.'</p>';
// Prüfung auf ungültigen Parameter in der URL
if($_GET['show'] < 1 || $_GET['show'] > $maxRows) {
echo '<p>Ungültiger Parameter!</p>';
die();
}
// Parameter ok, zeige Bild an
else {
// Sonderfall 1: Erstes Bild wird ausgewählt
if($_GET['show'] == "1") {
$start = $_GET['show'] - 1; // Setze LIMIT = 0;
$zeilen = 2; // Rufe nur 2 Zeilen aus der DB ab (Bild selbst und vor-Pfeil)
$mode = "start"; // Setze Steuerungsvariable für Anzeige auf "start"
}
// Sonderfall 2: Letztes Bild wird ausgewählt
elseif($_GET['show'] == $maxRows) {
$start = $_GET['show'] - 2; // Setze LIMIT vor das eigentliche Bild (für den Zurück-Pfeil)
$zeilen = 2; // Rufe nur 2 Zeilen aus der DB ab (zurück-Pfeil und Bild selbst)
$mode = "end"; // Setze Steuerungsvariable für Anzeige auf "end"
}
// Üblicher Fall: Ein Bild mittendrin wird ausgewählt
else {
$start = $_GET['show'] - 2; // Setze LIMIT vor das eigentliche Bild (für den Zurück-Pfeil)
$zeilen = 3; // Rufe 3 Zeilen aus der DB ab (zurück-, Bild selbst und vor-Pfeil)
$mode = "normal"; // Setze Steuerungsvariable für Anzeige auf "normal"
}
$sql = 'SELECT id, dateiname, beschreibung, eingestellt, views FROM gal_test ORDER BY dateiname LIMIT '.$start.', '.$zeilen.';';
$result = mysql_query($sql) OR die(mysql_error());
$i = 1;
// Ausgabe für den Fall Sonderfall 1 (siehe oben)
if($mode == "start") {
echo 'Debug: Mode is start';
echo '<ol>';
while($row = mysql_fetch_assoc($result)) {
// erster Datensatz --> Bild anzeigen
if($i == 1) {
echo '<li>ANZEIGEN: '.$row['dateiname'].'</li>';
}
// zweiter Datensatz --> zeige nur einen vor-Pfeil
else {
echo '<li><a href="./gallery.inc.php?show='.++$_GET['show'].'">VOR-PFEIL:</a> '.$row['dateiname'].'</li>';
}
$i++;
}
echo '</ol>';
}
// Ausgabe für den Sonderfall 2
elseif($mode == "end") {
echo 'Debug: Mode is end';
echo '<ol>';
while($row = mysql_fetch_assoc($result)) {
// erster Datensatz --> zeige nur einen zurück-Pfeil
if($i == 1) {
echo '<li><a href="./gallery.inc.php?show='.--$_GET['show'].'">ZURÜCK-PFEIL:</a> '.$row['dateiname'].'</li>';
}
// zweiter Datensatz --> Bild anzeigen
elseif($i == 2) {
echo '<li>ANZEIGEN: '.$row['dateiname'].'</li>';
}
$i++;
}
echo '</ol>';
}
// Ausgabe für den üblichen Fall
elseif($mode == "normal") {
echo 'Debug: Mode is normal';
echo '<ol>';
while($row = mysql_fetch_assoc($result)) {
// erster Datensatz --> erzeuge nur einen zurück-Link
if($i == 1) {
echo '<li><a href="./gallery.inc.php?show='.--$_GET['show'].'">ZURÜCK-PFEIL:</a> '.$row['dateiname'].'</li>';
}
// zweiter Datensatz --> Bild anzeigen
elseif($i == 2) {
echo '<li>ANZEIGEN: '.$row['dateiname'].'</li>';
}
// letzter Datensatz --> zeige nur einen vor-Link
elseif($i == 3) {
$next = $_GET['show'] +2;
echo '<li><a href="./gallery.inc.php?show='.$next.'">VOR-PFEIL:</a> '.$row['dateiname'].'</li>';
}
$i++;
}
echo '</ol>';
}
}
}
// ------- END SHOW PICTURES -------
else {
// show thumbnails or something like that
echo '<p>Still work to do... :-)</p>';
}
?>
Kommentar