dedlfix: Nach 5 Einträgen neue Seite

Beitrag lesen

echo $begrüßung;

Ich fang mal von hinten an.

Und außerdem muss ich ja für jede ?page bestimmen welche Mysql Einträge ausgelesen werden...

Du weißt, welche Seite du darstellen willst, weißt wieviele Einträge pro Seite sein sollen, also kannst du mit einer simplen Multiplikation das erste Element der Seite errechnen. Das und die Anzahl pro Seite sind die beiden Parameter für die LIMIT-Klausel. Das Rechnen wird einfacher, wenn du immer mit 0 zu zählen anfängst.

Seite 0 × 5 Elemente pro Seite = Startelement 0
  Seite 1 × 5 Elemente pro Seite = Startelement 5
  Seite 2 × 5 Elemente pro Seite = Startelement 10

Ich hatte mir es jetzt so gedacht: Zuerst fragt der mit if ab ob es mehr als 5 einträge sind.

Wenn ein MySQL-SELECT-Statement mit einer LIMIT-Klausel versehen wird, kann man ihm auch noch SQL_CALC_FOUND_ROWS mit auf den Weg geben (nach dem SELECT einzufügen). Eine zweite Abfrage nach SELECT FOUND_ROWS() liefert die Gesamtanzahl, die das Statement ohne LIMIT ergeben hätte. Mit etwas Division bekommst die Anzahl der Seiten für die Blätterfunktionalität.

24 gefundene Zeilen minus 1 : 5 Elemente pro Seite = 0..4 Seiten
  25 gefundene Zeilen minus 1 : 5 Elemente pro Seite = 0..4 Seiten
  26 gefundene Zeilen minus 1 : 5 Elemente pro Seite = 0..5 Seiten
  27 gefundene Zeilen minus 1 : 5 Elemente pro Seite = 0..5 Seiten

Das "minus 1" ergibt sich aus der Zählung ab 0. 25 Zeilen sind 0..24, 26 Zeilen sind 0..25. Das Element 25 ist das erste auf Seite 5.

wie muss ich dann die if-Abfragen stellen, die die MySQl Auslesungen beinflussen?

Mit obiger Vorgehensweise beschränkt sich das Manipulieren auf die Berechnung der LIMIT-Parameter.

Dann werden Links generiert

Du weißt ja, auf welcher Seite du bist und anhand der Berechnung, wieviele Seiten es gibt, sollte die Entscheidung, welche Blätterelemente anzuzeigen sind nicht schwerfallen. [1]

Ein Problem ist allerdings noch. Jemand könnte als gewünschte Seite einen negativen Wert, einen zu großen, einen mit Kommastellen oder einen Nicht-Zahlenwert angeben. Mit intval() bekommt man erst einmal garantiert einen Integerwert und im Zweifelsfall eine 0. Diesen kann man noch, wenn er kleiner als 0 ist, auf 0 festsetzen. Die maximale Seitenanzahl ergibt sich erst nach der Abfrage und der Berechnung. Das sieht nach einem Problem aus. Ist es aber nicht. Ein zu großer Anfangswert bei LIMIT wirkt sich nicht schädlich aus. Es gibt dann nur eine leere Ergebnismenge und damit eine leere Ergebnisanzeige im Browser. Pech gehabt - wer manipuliert ist eh nicht am echten Ergebnis interessiert. SQL_CALC_FOUND_ROWS und FOUND_ROWS() liefern trotzdem das gewünschte Ergebnis und die Berechnung der Blätterelemente kann problemlos erfolgen.

[1] Eine zu große Seitenzahl (?page=...) ist unschädlich bei der Ermittlung der Ergebnismenge. Beim Berechnen der Blätterelemente kann (der FOUND_ROWS()-Wert steht ja jetzt zur Verfügung) und muss der page-Wert in seinen erlaubten Rahmen zurückgebracht werden.

echo "$verabschiedung $name";