Optimiert meine Mini-Bildergalerie (PHP & MySQL)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Optimiert meine Mini-Bildergalerie (PHP & MySQL)

    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:
    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_HOSTMYSQL_USERMYSQL_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'] < || $_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>';
      }
    ?>

  • #2
    PHP-Code:
    // Datenbank erstellen, wenn nötig
    $sql 'CREATE DATABASE IF NOT EXISTS '.MYSQL_DATABASE;
           
    mysql_query($sql) OR die(mysql_error()); 
    Was soll denn das?

    Kommentar


    • #3
      Original geschrieben von onemorenerd
      PHP-Code:
      // Datenbank erstellen, wenn nötig
      $sql 'CREATE DATABASE IF NOT EXISTS '.MYSQL_DATABASE;
             
      mysql_query($sql) OR die(mysql_error()); 
      Was soll denn das?
      Ja gut, das ist prinzipiell Unsinn. Hat an der Stelle gar nichts zu suchen. Ist mehr so für ein Install-Script. Aber mir geht es in diesem Thread eher um die Optimierung der Kernfunktionalität der Bildanzeige. Trotzdem danke!

      Kommentar


      • #4
        Original geschrieben von bisselbock
        Aber mir geht es in diesem Thread eher um die Optimierung der Kernfunktionalität der Bildanzeige. Trotzdem danke!
        Eins nach dem anderen.
        PHP-Code:
        // 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>'
        Wie wäre es mit einem einfachen 'SELECT COUNT(id) FROM gal_test'?
        PHP-Code:
        // Prüfung auf ungültigen Parameter in der URL
        if($_GET['show'] < || $_GET['show'] > $maxRows) {
            echo 
        '<p>Ungültiger Parameter!</p>';
            die();

        Kann man natürlich machen, gefällt mir aber nicht. Nutze die Tatsache, dass jede Galerie mind. 1 Bild enthält* und setzte $_GET['show'] = 1, wenn es außerhalb der zulässigen Spanne ist.

        *) Dafür mußt du mit DB-Schema und/oder Code sorgen.

        Kommentar


        • #5
          Wie wäre es mit einem einfachen 'SELECT COUNT(id) FROM gal_test'?
          Hast natürlich recht. Das hatte ich einfach kopiert von der Abfrage die weiter unten kommt...
          Kann man natürlich machen, gefällt mir aber nicht. Nutze die Tatsache, dass jede Galerie mind. 1 Bild enthält* und setzte $_GET['show'] = 1, wenn es außerhalb der zulässigen Spanne ist.
          *) Dafür mußt du mit DB-Schema und/oder Code sorgen.
          Das ist natürlich Geschmackssache. Deine Anmerkung zum DB-Schema verstehe ich nicht ganz. Natürlich hat jede Galerie mindestens ein Bild. Dafür sorge ich schon. Vielleicht meinst du das ja...

          Kommentar

          Lädt...
          X