Einführung
Paginierung ist ein wichtiges Konzept beim Erstellen datengesteuerter Anwendungen. Beim Abrufen von Datensätzen aus der Datenbank kann eine große Anzahl von Datensätzen geladen werden. Wenn beispielsweise eine Abfrage für aktive Benutzer oder Benutzer an einem bestimmten Standort ausgeführt wird, kann eine große Anzahl von Benutzern im dreistelligen oder sogar vierstelligen Bereich zurückgegeben werden. Die Anzeige dieser riesigen Anzahl von Datensätzen auf einer einzigen Webseite ist keine benutzerfreundliche Lösung, da sie den Benutzer überfordern und die Flüssigkeit der Benutzererfahrung beeinträchtigen kann.
Daher ist es eine bevorzugte Option, die Anzahl der Datensätze zu begrenzen. Dies ist das Konzept der Paginierung. Mit anderen Worten: Wir teilen die Anzahl der Datensätze in Seiten auf und zeigen dann die jeweilige Seite an. Eine einzelne Seite kann zehn, fünfzehn oder eine andere sinnvolle Anzahl von Datensätzen enthalten, die im Frontend angezeigt werden können.
Während die Paginierung die allgemeine Benutzererfahrung der Anwendung verbessern kann, kann sie die Anwendung auch schneller machen, da wir eine geringere Anzahl von Datensätzen abrufen. Dadurch werden weniger Daten über das Netzwerk zwischen Client und Server übertragen, was die Latenzzeit verringert.
In diesem Tutorial werden wir einen PHP-Code erstellen, der eine Verbindung zur Datenbank herstellt, und die Paginierung mithilfe der MySQL-Datenbank und ihrer LIMIT-Klausel implementieren.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie:
-
Die neueste Version von Ubuntu, installiert und betriebsbereit. Folgen Sie dem Tutorial zur Einrichtung Ihres Ubuntu-Servers, wenn Sie Hilfe benötigen.
-
Sie müssen außerdem PHP und MySQL installiert haben. Zur Einrichtung von PHP und MySQL haben wir ein Tutorial: LAMP-Stack-Einrichtung – Linux Apache MySQL PHP.
Schritt 1 — Einrichten eines Datenbankbenutzers und einer Testdatenbank
In diesem Tutorial werden wir die Datenbankverbindung mit der MySQL-Datenbank herstellen und die Datensätze abrufen. Diese Datensätze werden auf einer HTML-Seite mit dem Tabellenelement angezeigt. Um die Verbindung herzustellen und Datensätze anzuzeigen, verwenden wir ein PHP-Skript. Sobald wir mit der Datenbankverbindung bereit sind, werden wir unsere Anwendung mit und ohne Paginierung testen. Auf diese Weise können wir verstehen, wie Paginierung in der Praxis funktioniert.
Um eine Verbindung zur MySQL-Datenbank herzustellen, benötigen wir eine MySQL-Beispieldatenbank und die Authentifizierungsinformationen des Benutzers für die Verbindung zur MySQL-Datenbank. In diesem Schritt erstellen Sie einen Nicht-Root-Benutzer für Ihre MySQL-Datenbank, eine Beispieldatenbank und eine Tabelle zum Testen des PHP-Skripts.
Melden Sie sich zuerst an Ihrem Server an. Melden Sie sich dann mit dem folgenden Befehl am MySQL-Server an:
|
1 |
mysql> sudo mysql -u root -p |
Sie werden nach dem Passwort des Root-Benutzers gefragt. Geben Sie das Passwort ein und drücken Sie Eingabetaste, um fortzufahren. Erstellen Sie als Nächstes eine Beispieldatenbank namens test_db, die wir in unserem Tutorial verwenden werden. Um eine neue Datenbank zu erstellen, führen Sie den folgenden Befehl aus:
|
1 |
mysql> Create database test_db; |
Sie sehen die Ausgabe des MySQL-Servers, dass eine Zeile betroffen ist. Als Nächstes müssen wir einen neuen Benutzer für diese Datenbank erstellen. Wir werden diesem Benutzer alle Berechtigungen erteilen. Achten Sie jedoch bei der Arbeit mit praktischen Anwendungen darauf, die Berechtigungen einzuschränken. Wir nennen unseren Benutzer test_user. In dem folgenden Befehl ersetzen Sie das PASSWORD durch ein starkes Passwort:
|
1 |
mysql> GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD'; |
Sobald der Benutzer erstellt wurde, aktualisieren Sie die Berechtigungen (Flush):
|
1 |
mysql> FLUSH PRIVILEGES; |
Da nun sowohl test_user als auch test_db bereit sind, verwenden Sie test_db, um Tabellen zu erstellen. Um zu test_db zu wechseln, führen Sie den folgenden Befehl aus:
|
1 |
mysql> Use test_db; |
Sobald wir in der Ausgabe sehen, dass die Datenbank gewechselt wurde, können wir unsere Tabelle erstellen. Wir erstellen eine neue Tabelle namens Products, um die Produkte aufzunehmen. Für unsere Zwecke benötigen wir nur zwei Spalten in dieser Tabelle: product_id und product_name. Wir werden product_id auf AUTO_INCREMENT, so dass er jedes Mal erhöht wird, wenn wir ein neues Produkt hinzufügen. Die andere Spalte namens product_name wird verwendet, um den Namen des Produkts zu speichern. Die Spalte product_name wird verwendet, um jedes Produkt anhand des Namens zu unterscheiden:
|
1 |
mysql> Create table products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50) NOT NULL ) Engine = InnoDB; |
Jetzt werden wir einige Produkte zu dieser neu erstellten Tabelle hinzufügen. Führen Sie dazu die folgenden Befehle aus:
|
1 2 3 4 5 6 7 8 9 10 |
mysql> Insert into products(product_name) values ('WIRELESS MOUSE'); mysql> Insert into products(product_name) values ('BLUETOOTH SPEAKER'); mysql> Insert into products(product_name) values ('GAMING KEYBOARD'); mysql> Insert into products(product_name) values ('320GB FAST SSD'); mysql> Insert into products(product_name) values ('17 INCHES TFT'); mysql> Insert into products(product_name) values ('SPECIAL HEADPHONES'); mysql> Insert into products(product_name) values ('HD GRAPHIC CARD'); mysql> Insert into products(product_name) values ('80MM THERMAL PRINTER'); mysql> Insert into products(product_name) values ('HDMI TO VGA CONVERTER'); mysql> Insert into products(product_name) values ('FINGERPRINT SCANNER'); |
Um zu überprüfen, ob diese Produkte in die Tabelle eingetragen wurden, führen Sie den folgenden Befehl aus:
|
1 |
mysql> select * from products; |
Wenn Sie die oben eingegebenen Produkte sehen, können Sie fortfahren. Beenden Sie die MySQL-Datenbank mit dem folgenden Befehl:
|
1 |
mysql> quit; |
Nachdem wir nun die MySQL-Datenbank eingerichtet und Testdaten eingegeben haben, können wir das PHP-Skript codieren, um eine Verbindung zu dieser Datenbank herzustellen und Datensätze abzurufen.
Schritt 2 – Abrufen und Anzeigen von Datensätzen ohne Pagination
Wie oben besprochen, werden wir die Datensätze zunächst ohne Pagination anzeigen. Wir werden ein PHP-Skript erstellen, das eine Verbindung zur MySQL-Datenbank herstellt und die Datensätze abruft. Wir werden uns mit der test_db, die wir oben erstellt haben, unter Verwendung des test_user verbinden und die Datensätze abrufen.
Unsere Tabelle products enthält derzeit nur zehn Datensätze. Für viele Benutzer ist es vielleicht nicht offensichtlich, ob eine Pagination erforderlich ist oder nicht. Das Testen der Anwendung ohne Pagination wird jedoch verdeutlichen, wie sie zur Gesamterfahrung der Anwendung beiträgt. Wir werden auch verstehen, wie die Aufteilung der Daten zu einer besseren Benutzererfahrung beiträgt und die Serverlast verringert.
Führen Sie auf Ihrem PHP-Server im Stammverzeichnis (Document Root) des Website-Ordners den folgenden Befehl aus:
sudo nano /var/www/html/pagination_test.php
Fügen Sie nun in dieser Datei den folgenden Inhalt hinzu. Stellen Sie sicher, dass Sie PASSWORD durch den Passwortwert Ihres test_user:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=test_db", "test_user", "PASSWORD"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql = "select * from products"; $stmt = $pdo->prepare($sql); $stmt -> execute(); echo "<table border='1' align='center'>"; while (($row = $stmt -> fetch(PDO::FETCH_ASSOC)) !== false) { echo "<tr>"; echo "<td>".$row['product_id']."</td>"; echo "<td>".$row['product_name']."</td>"; echo "</tr>"; } echo "</table>"; } catch(PDOException $e) { echo $e->getMessage(); } ?> |
Speichern Sie die Datei. Bevor wir fortfahren, fassen wir zusammen, was wir oben getan haben:
-
Zuerst haben wir uns mit der MySQL-Datenbank verbunden, und dafür haben wir die PHP Data Object (PDO)-Bibliothek verwendet. Wir haben die Anmeldedaten des MySQL-Benutzers verwendet, den wir oben benutzt hatten, um uns mit der MySQL-Datenbank zu verbinden. PDO ist eine äußerst hilfreiche Bibliothek, die für die Verbindung mit der Datenbank verwendet wird. Sie macht die Datenzugriffsschicht einfach zu codieren und ermöglicht die Verbindung zu verschiedenen Datenbanken, ohne die Anwendung umfassend umstrukturieren zu müssen. PDO verwendet Prepared Statements, was sicherstellt, dass die Sicherheit nicht beeinträchtigt wird. Daher werden Abfragen sicher ausgeführt.
-
Als Nächstes haben wir die PDO API verwendet, um die Anweisung select * from products auszuführen. Die Anweisung $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false) stellt sicher, dass die Datentypen in PHP dieselben sind wie in der Datenbank. Daher erscheinen product_id und product_name als Integer bzw. String.
-
Die Anweisung $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); weist PDO an, eine Exception auszulösen, wenn ein Fehler auftritt. Dadurch können wir die Exception im try … catch-Block leicht abfangen und nach Bedarf behandeln.
Da unser Skript nun bereit ist, müssen wir es ausführen. Öffnen Sie dazu Ihren Browser und rufen Sie die URL auf: /var/www/html/pagination_test.php. Stellen Sie sicher, dass Sie die URL mit Ihrer Server-IP ergänzen. Wenn Sie das Skript lokal ausführen, lautet Ihre URL http://localhost/var/www/html/pagination_test.php.
Sie sehen die folgende Ausgabe:

Hier werden unsere Produkte zurückgegeben und auf der Seite angezeigt. Stellen Sie sich nun vor, wir hätten Hunderte von Produkten. Dies würde zu einer langen Schleife führen, um die Daten abzurufen und auf der Seite anzuzeigen. Dadurch würde sich die Ladezeit der Seite verlängern.
Im nächsten Abschnitt werden wir das PHP-Skript ändern und die MySQL LIMIT-Klausel einfügen. Dies wird das Problem der Anzeige einer großen Anzahl von Datensätzen beheben. Wir werden die Links für die Seitennummerierung hinzufügen, damit der Benutzer durch die Seiten navigieren kann.
Schritt 3 – Einrichten der Seitennummerierung mit PHP
In diesem Schritt werden wir die Seitennummerierung mit PHP einrichten, um die Daten in mehreren Tabellen anzuzeigen. Um die Seitennummerierung zu ermöglichen, werden wir das im vorherigen Schritt codierte Skript ändern.
Wir werden die LIMIT-Klausel der MySQL-Datenbank verwenden. Bevor wir dies zum Skript hinzufügen, sehen wir uns ein Beispiel für die MySQL- LIMIT-Syntax an:
|
1 |
mysql> Select [column1, column2, column n...] from [table name] LIMIT offset, records; |
In der obigen Anweisung können wir sehen, dass die LIMIT-Klausel die Argumente offset und records hat. offset gibt an, wie viele Datensätze übersprungen werden sollen, und records gibt die maximale Anzahl von Datensätzen an, die pro Seite angezeigt oder aus der Datenbank abgerufen werden sollen.
Da wir nun wissen, wie die Seitennummerierung funktioniert, sehen wir uns an, wie wir sie implementieren werden. Wir werden drei Datensätze pro Seite anzeigen. Wenn wir also zehn Datensätze in unserer Datenbank haben, erhalten wir vier Seiten, indem wir die Gesamtzahl der Datensätze durch die Anzahl der Datensätze pro Seite teilen. Da das Ergebnis möglicherweise keine ganze Zahl ist, verwenden wir die PHP-Funktion Ceil-Funktion, um auf die nächste ganze Zahl aufzurunden, um ein ganzzahliges Ergebnis zu erhalten. Unten finden Sie ein einfaches Code-Snippet zur Demonstration der Ceil-Funktion:
|
1 |
$total_pages=ceil($total_records/$per_page); |
Jetzt werden wir den Code für die Seitennummerierung hinzufügen. Um die Seitennummerierung zu aktivieren und die Navigationslinks hinzuzufügen, öffnen Sie die Datei /var/www/html/pagination_test.php-Datei mit dem folgenden Befehl:
|
1 |
$ sudo nano /var/www/html/pagination_test.php |
Ersetzen Sie als Nächstes den Inhalt dieser Datei durch den folgenden Code:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=test_db", "test_user", "PASSWORD"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); /* Beginn Paging-Info */ $page = 1; if (isset($_GET['page'])) { $page = filter_var($_GET['page'], FILTER_SANITIZE_NUMBER_INT); } $per_page = 3; $sqlcount = "select count(*) as total_records from products"; $stmt = $pdo->prepare($sqlcount); $stmt->execute(); $row = $stmt->fetch(); $total_records = $row['total_records']; $total_pages = ceil($total_records / $per_page); $offset = ($page-1) * $per_page; /* Ende Paging-Info */ $sql = "select * from products limit :offset, :per_page"; $stmt = $pdo->prepare($sql); $stmt->execute(['offset'=>$offset, 'per_page'=>$per_page]); echo "<table border='1' align='center'>"; while ( ($row = $stmt->fetch(PDO::FETCH_ASSOC) ) !== false) { echo "<tr>"; echo "<td>".$row['product_id']."</td>"; echo "<td>".$row['product_name']."</td>"; echo "</tr>"; } echo "</table>"; /* Beginn Navigation */ echo "<table border='1' align='center'>"; echo "<tr>"; if ($page-1 >= 1) { echo "<td><a href=".$_SERVER['PHP_SELF']."?page=".($page - 1).">Vorherige</a></td>"; } if ($page+1 <= $total_pages) { echo "<td><a href=".$_SERVER['PHP_SELF']."?page=".($page + 1).">Nächste</a></td>"; } echo "</tr>"; echo "</table>"; /* Ende Navigation */ } catch(PDOException $e) { echo $e->getMessage(); } ?> |
Hier ist eine Zusammenfassung dieses Codes:
-
Wir müssen die Informationen über die Seite speichern, auf der wir uns gerade befinden. Dafür verwenden wir die $page Variable. Die $page Variable wird verwendet, um die Seite, auf der wir uns gerade befinden, mithilfe der $_GET[‘page’] Variable zu extrahieren.
-
Als Nächstes müssen wir angeben, wie viele Einträge wir auf einer Seite anzeigen. Dafür verwenden wir die $per_page -Variable. Hier zeigen wir nur drei Produkte pro Seite an.
-
Wie oben besprochen, müssen wir die Gesamtzahl der in der Datenbank vorhandenen Datensätze ermitteln. Dies ist erforderlich, damit wir die Gesamtzahl der Seiten bestimmen können. Die $total_records -Variable enthält diese Information.
-
Schließlich müssen wir wissen, wie viele Datensätze übersprungen werden sollen. Wenn wir uns beispielsweise auf der zweiten Seite befinden, müssen wir die ersten drei Datensätze der Datenbank überspringen. Wir verwenden die $offset -Variable, um diese Information zu speichern. Wir haben diese Information bei jedem Laden der Seite mit der Formel $offset=($page-1)*$per_page berechnet. Wenn Sie eine andere Anzahl von Elementen anzeigen müssen, können Sie den Wert in der $per_page -Variable angeben.
-
Um die Navigationsschaltflächen anzuzeigen, verwenden wir den folgenden Code:
|
1 2 3 4 5 6 7 8 9 10 |
. . . if( $page-1>=1) { echo "<td><a href=".$_SERVER['PHP_SELF']."?page=".($page-1).">Vorherige</a></td>"; } if( $page+1<=$total_pages) { echo "<td><a href=".$_SERVER['PHP_SELF']."?page=".($page+1).">Nächste</a></td>"; } . . . |
Die Logik dahinter ist, dass die $page verwendet wird, um die aktuelle Seite zu speichern. Wenn wir die vorherige Option auf der Seite anzeigen möchten, zieht das Skript eins vom Wert der $page -Variable ab. Wenn das Ergebnis größer oder gleich eins ist, wird die vorherige Option auf der Seite angezeigt.
Um die nächste Option anzuzeigen, addieren wir analog eins zur $page -Variable. Hier stellen wir sicher, dass das Ergebnis der Addition die Gesamtzahl der Seiten in der $total_pages -Variable nicht überschreitet.
Danach ist es an der Zeit, die Seite zu überprüfen. Öffnen Sie den Browser und rufen Sie die Seite über die zuvor verwendete URL auf:
|
1 |
http://your_server_ip/pagination_test.php |
Sie sehen die Ausgabe wie folgt:



Hier haben Sie schließlich die Paginierung mithilfe der LIMIT -Klausel von MySQL im PHP-Skript implementiert. Durch die Implementierung der Paginierung in Ihrer Anwendung haben Sie eine bessere Möglichkeit, durch mehrere Datensätze zu navigieren.
Fazit
In diesem Tutorial haben wir uns angesehen, wie man eine Paginierung mit PHP und MySQL auf Ubuntu implementiert. Mit diesen Schritten können Sie Anwendungen erstellen, die eine große Anzahl von Datensätzen angemessen anzeigen können, aufgeteilt auf die Seiten für eine effektive Handhabung.
Darüber hinaus haben wir weitere hilfreiche Tutorials zu PHP und MySQL unter Ubuntu:
- Installation und Absicherung von phpMyAdmin auf Ubuntu 18.04
- So setzen Sie das Root-Passwort für MariaDB oder MySQL zurück
- CloudSigma-Tutorial: So richten Sie MySQL auf einem Server ein und MySQL-Grundlagen
Viel Spaß beim Programmieren!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.