PHP MySQL Pagination

  • Hallo,


    ich melde mich mal wieder mit einer Frage.
    Da ich ja aktuell mitten in der Einarbeitung in PHP stecke, suche ich nun eine Möglichkeit die SQL Ergebnisse in PHP auf mehrere Seiten aufzuteilen. Insgesamt z.B. 100 Einträge, 10 Seiten mit je 10 Einträgen. Also so wie hier im Forum.


    Ich habe natürlich schon Bing bemüht und auch viele Beispiele gefunden die aber alle komplett verschieden aufgebaut waren. Die einen mit viel IF Abfragen und die anderen mit Tonnenweise Variablen. Hab natürlich auch welche ausprobiert aber entweder hat das gar nicht hin gehauen oder es ging nur hat er die seiten nicht richtig gezählt.


    Hat jemand eine möglichst einfache Möglichkeit auf Lager die ich ohne Probleme in mehrere Seiten integrieren kann?

    "I tell computers to do things. Sometimes they listen."


    Chris Kragt | kragt itservices | Informatikkaufmann

    Web: www.kragt.io | Mail: hi [at] kragt.io

  • Nunja, also wenn ich das richtig verstanden habe, kannst du es mit einem Array lösen.


    Einfach mit einer while-Schleife bis 10 hochzählen lassen und ausgeben, oder in eine neue Variable speichern.


    Leider weiß ich gerade nicht wie du es exakt umsetzen kannst, aber mit nem Array oder auch mit einem zwei-dimensionalen Array müsste es relativ simpel lösbar sein.

  • ganz simpel, du machst erstmal nen count auf die datenmenge. Dann haste die anzahl der daten und errechnest dadurch dann wie viele seiten du hast.
    Bsp.:
    128 Datensätze
    10 Datensätze pro Seite
    13 Seiten


    dann gehst du hin und arbeitest mit LIMIT im SQL.
    Und zwar kannst du dort einen Startwert angeben und wie viele Datensätze du haben willst:
    Beispiel:

    PHP
    1. $qry=$sql->query("SELECT `name`, `orgname` FROM `image` WHERE `uid`='".$sql->escape_string($_SESSION["uid"])."' AND `id` IN (SELECT `imageid`AS 'id' FROM `imagealbum` WHERE `albumid`='".$sql->escape_string($_GET['id'])."') ORDER BY `upltime` DESC LIMIT ".$start.",10");


    $start ist der Anfang. Starten tut das ganze bei 0 (Seite 1).
    Zum berechnen des Starteintrags nach der aktuellen Seite:

    PHP
    1. $start = ($_GET['page']-1)*10;


    (die 10 ist hier immer die Anzahl der Einträge pro Seite)


    und dann hast dus.



  • die Seiten kannst du dir mit der anzahl der objekte errechnen. macht einfach ein

    SQL
    1. SELECT COUNT() FROM tabelle


    auf die daten oder nen select ohne limit und dann nen num_rows und hast die anzahl.


    Ich hab hier auch ne Klasse die die Pagination generiert. Die zeigt auch nicht alle Seiten an, sondern nur nen Teilausschnitt:
    https://gist.github.com/virtualmarc/779b0becdedb24a206ef
    unten im Kommentar steht wie mans benutzt.