Andi: Zwischen Datensätzen blättern

Ich habe mit PHP/MYSQL eine kleine Bildergallerie gemacht ( http://insane.blastbeat.de ). Es gibt eine Detailansicht der Bilder bei der man zwischen den Bildern blättern kann. Momentan vergebe ich die Namen der Bilder fortlaufend und kann so zwischen ihnen blättern und zudem feststellen, auf welcher Seite sie sich befinden (wegen dem "zurück zur Übersich"-Link).
Das ist natürlich nicht sonderlich sinnvoll, da man
1. keinen Datensatz zwischendrin löschen kann und
2. Die Bilder nur in der Reihenfolge wie man sie einsortiert hat ausgeben kann.
Wie kann man das besser lösen?

Vielen Dank bereits im Voraus für Eure Hilfe!

  1. Hallo Andi,  <- </faq/#Q-05a>

    Ich habe mit PHP/MYSQL eine kleine Bildergallerie gemacht ( http://insane.blastbeat.de ).

    -></faq/#Q-19>

    Es gibt eine Detailansicht der Bilder bei der man zwischen den Bildern blättern kann. Momentan vergebe ich die Namen der Bilder fortlaufend und kann so zwischen ihnen blättern und zudem feststellen, auf welcher Seite sie sich befinden (wegen dem "zurück zur Übersich"-Link).

    Für was brauchst du eigentlich mysql? was speicherst du in der Datenbank? Speicher doch einfach die Bildnamen und lies das ganze mit Hilfe von http://www.dclp-faq.de/q/q-mysql-seitenweise.html wieder aus.

    Wie kann man das besser lösen?

    das ist etwas schwierig zu sagen, da ich deinen Code überhaupt nicht kenne (nein, bitte _nicht_ den kompletten Code hier posten)

    Grüße aus Nürnberg  <- </faq/#Q-05c>
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hi Tobias!

      <- </faq/#Q-05a>

      Danke für den Hinweis mit den Grußformeln, hab ich voll vergessen!

      In der Datenbank werden Kommentare zu den einzelnen Bildern gespeichert sowie die Bildnamen und ein alternativer Text.
      Das mit limit hab ich mir auch schon überlegt, aber da war ich mir nicht so ganz sicher, ob das funktioniert.
      Momentan werden alle Bilder ausgelesen und wenn man auf eins klickt, wird der Bildname übergeben (z.b. insane-15.jpg). Dann werden Vorgänger und Nachfolger ermittelt (15-1: ..-14.jpg und 15+1: ..-16.jpg). Daraus lassen sich dann die Links für "<<zurück" und "vor>>" bestimmen. Zudem kann man anhand der Bildnummer erkennen, auf welcher Seite sich das Bild befinden muss, dementsprechend entsteht der "zurück zur Übersicht"-Link.
      Ich würde jetzt zum Beispiel aber gern einfach die id übergeben und daraus dann ermitteln, welches der nächste und welches der vorherige Datensatz ist und auf welcher Seite der jeweils aktuelle Datensatz liegt.

      Grüße aus Karlsruhe,

      Andi

      1. Hallo Andi,

        In der Datenbank werden Kommentare zu den einzelnen Bildern gespeichert sowie die Bildnamen und ein alternativer Text.

        hat jeder Datensatz auch eine eindeutig id?

        Momentan werden alle Bilder ausgelesen

        womöglich mit "SELECT * ..."? ->http://www.dclp-faq.de/q/q-sql-select.html - auch wenn nicht, ist das überflüssig.

        und wenn man auf eins klickt, wird der Bildname übergeben (z.b. insane-15.jpg).

        übergib doch eine eindeutige id.

        Dann werden Vorgänger und Nachfolger ermittelt (15-1: ..-14.jpg und 15+1: ..-16.jpg).
        Daraus lassen sich dann die Links für "<<zurück" und "vor>>" bestimmen.

        du könntest die vor/zurück-Links auch so machen, dass du das Script z.B. mit ...php?id=15&richtung=vor aufrufen, und dann anhand dessen was in $_GET['richtung'] steht dein aktuelles Bild abrufen (bei $_GET['richtung']=='vor' z.B. mit "SELECT ... FROM .... WHERE id < mysql_escape_string($_GET['id']) LIMIT 1") - das habe ich mir aber nur mal ausgedacht, aber noch nicht selbst erprobt :-)

        Zudem kann man anhand der Bildnummer erkennen, auf welcher Seite sich das Bild befinden muss, dementsprechend entsteht der "zurück zur Übersicht"-Link.

        das ist natürlich dann etwas schwieriger zu lösen (ich habe gerade mal in meine unsäglich schlechten Code (den ich irgendwann mal geschrieben habe) gemacht habe, aber eine wirklich gute Lösung habe ich da auch nicht (ich habe die Anzahl der Bilder die vor dem aktuellen Bild existieren ermittelt, und daraus auf die Seitennummer geschlossen))

        Ich würde jetzt zum Beispiel aber gern einfach die id übergeben und daraus dann ermitteln, welches der nächste und welches der vorherige Datensatz ist

        den Query den ich oben hingeschrieben habe, kannst du natürlich auch auf der Seite vorher einsetzen, nur brauchst du dann mehr Datenbankabfragen.

        und auf welcher Seite der jeweils aktuelle Datensatz liegt.

        vielleicht fällt jemandem dazu noch was gutes ein :-)

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo Tobias!

          Die Idee mit der Richtung muss ich morgen mal ausprobieren, allerdings kann ich die Bilder dann wohl immer nur nach id sortiert ausgeben. Das ist dann auch wieder etwas ungeschickt.
          Die Datensätze haben eine eindeutige id, da aber nur die Bildnamen schön geordnet und zudem auch unique sind, habe ich die Namen übergeben, da ich daraus ja momentan noch die vor und zurück Links berechne. Aber diese Lösung ist wie schon gesagt ja sehr bescheiden...

          Nun ja, vielen Dank für Deine schnelle Hilfe und vielleicht fällt wirklich jemandem noch was Gutes dazu ein.

          Grüße aus Karlsruhe,

          Andi

          1. hallo andi!

            Die Idee mit der Richtung muss ich morgen mal ausprobieren, allerdings kann ich die Bilder dann wohl immer nur nach id sortiert ausgeben. Das ist dann auch wieder etwas ungeschickt.

            ich finde das ist die beste, weil flexibelste lösung. du hast dann zwar mehr datenbankabfragen, aber somit ist auch gewährleistet, daß deine galerie bis in alle ewigkeit weiterläuft.

            Die Datensätze haben eine eindeutige id, da aber nur die Bildnamen schön geordnet und zudem auch unique sind, habe ich die Namen übergeben, da ich daraus ja momentan noch die vor und zurück Links berechne. Aber diese Lösung ist wie schon gesagt ja sehr bescheiden...

            zum einen sagst du hier, daß ohnehin sowohl die datensatz-ids als auch die bildnamen eindeutig (unique) sind.
            weiterhin werden die datensatz-ids die exakt gleiche reihenfolge ergeben, wenn du das entsprechende feld in der tabelle mit dem auto-increment attribut versiehst.

            zur übersicht:
            wenn du für ein bild wissen willst auf welcher seite es sich befindet, könntest du einfach eine abfrage starten, die ermittelt wieviele datensätze sich bis zum aktuellen bild in der tabelle befinden. diese zahl teilst du dann durch die anzahl an bildern pro seite und der wert vor dem komma erhöht um eins (bzw. bei glatten ergebniswerten eben dieser) ist die seite, auf der du dich befindest.

            prinzipiell ist das also das gleiche, was tobias auch schon vorgeschlagen hat. da ich's genau so machen würde war das also auch noch mein senf dazu.