Um eine Pagination in PHP durchzuführen, können Sie relativ einfach mit einem Mysql LIMIT und Offset arbeiten. Hier lernen Sie, wie das funktioniert.
Datenbank Abfrage anpassen
Normalerweise erhalten Sie alle Datensätze ohne Limit mit z.B. dieser Abfrage:
$command = "SELECT DISTINCT name, address, website FROM companies ORDER BY name DESC";
Wenn Sie jetzt ein LIMIT in der Query hinzufügen, wird nur die maximale Anzahl in der Query abgefragt:
$command = "SELECT DISTINCT name, address, website FROM companies ORDER BY name DESC LIMIT 50";
Dadurch werden zum Beispiel nur 50 Beiträge ausgegeben. Aber nun wollen wir die nächsten 50 Ergebnisse anzeigen lassen. Dafür kommt der "OFFSET" ins Spiel.
Hier sehen Sie ein Beispiel, wie Sie in Verbindung mit LIMIT ein Offset einrichten:
$command = "SELECT DISTINCT name, address, website FROM companies ORDER BY name DESC LIMIT 50 OFFSET 50";
Verständlich heißt das: Gib mir Name, Adresse und Website von der Tabelle companies - zeige mir die nächsten 50, nach der Anzahl 50 (50-100) an.
Offset und Limit parametisieren
Der schnellste und einfachste Weg, seine Pagination vorzubereiten ist, per $_GET Parametern die Seite festzulegen. Beachten Sie aber, dass $_GET und $_POST Parameter vom Clienten manipuliert werden können. Minimieren Sie das Risiko und arbeiten Sie grundsätzlich mit Parameter Sanitisierung und Prepared Statements! Dieses Tutorial ist nur ein Beispiel, wie Sie arbeiten können, keine Empfehlung.
Wir möchten jetzt das Limit und den Offset durch eine Page Variable dynamisieren:
$limit = 50; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $offset = ($page - 1) * $limit;
Falls der $_GET Parameter "page" nicht gesetzt wird (z.B. seite.de/?page=1) wird die variable auf 1 gesetzt.
Wir rechnen den Offset, indem wir Die Seite -1 rechnen und dann mit dem Limit multiplizieren.
Unsere Query könnte dann also so aussehen:
$command = "SELECT DISTINCT name, address, website FROM companies ORDER BY name DESC LIMIT $limit OFFSET $offset";
Uns werden jetzt die ersten 50 Datensätze bei Seite 1 und die nächsten 50 bei Seite 2 angezeigt. Ist das Limit erreicht, werden einfach weniger Ergebnisse angezeigt.
So einfach lässt sich theoretisch eine Pagination via PHP lösen.