logo

PHP paginering

PHP bruges mest til at gemme og vise data fra en database. Sideinddeling kan udføres med ajax, men her gøres dette med ikke-ajax. I denne tutorial lærer vi paginering i PHP med MySQL . Lad os tage en kort gennemgang om paginering med et eksempel -

Det er muligt, at en SQL SELECT-forespørgsel kan returnere millioner af poster tilbage. Det er ikke en god idé at vise alle poster på en enkelt side. En stor liste over poster på en enkelt side kan tage så lang tid at indlæse siden og også bruge tid på at finde specifikke data. Dette kan forårsage (fører til) forvirring i brugerens sind. Opdel derfor disse registreringer over flere sider i henhold til brugerkravet.

Så hvad kan vi gøre for at distribuere disse store antal poster i antal sider? Metoden til at distribuere en enkelt liste til flere sider er kendt som Sideinddeling . Personsøgning refererer til at vise dit forespørgselsresultat på flere sider i stedet for en enkelt side.

Hvad er sideinddeling?

Sideinddeling er en måde at vise data på flere sider i stedet for at placere dem på en enkelt side. Sideinddeling hjælper med at opdele posterne på flere sider, hvilket gør dataene mere læsbare og forståelige.

bash check om miljøvariablen er indstillet

Sideinddeling er en almindelig opgave for PHP-udviklere. MySQL hjælper udvikleren med at oprette paginering ved at bruge BEGRÆNSE klausul, som tager to argumenter. Det første argument som OFFSET og det andet argument er antal poster som vender tilbage fra databasen.

Lad os se på nogle fordele og ulemper ved at bruge pagineringskoncept i PHP -

Fordele ved paginering

  • Sideinddeling er meget nyttig i store projekter, fordi det gør webarbejdet mere professionelt. Ikke kun mere professionelt, men det gør også, at websiden fungerer meget hurtigere, præcist og effektivt.
  • Ved hjælp af paginering kan vi spare indlæsningstiden på en side ved at opdele dataene på forskellige sider. Det sparer os for at indlæse en masse information på én gang.
    For eksempel - En webside med 1000 billeder vil tage længere tid at indlæse billeder end de 50 billeder på hver webside.
    Det betyder, at tusindvis af billeder har brug for tusindvis af HTTP-anmodninger, hvilket ville få siden til at reagere. Dette problem er løst ved at begrænse mængden af ​​data ved hjælp af paginering ved hjælp af LIMIT-klausul.
  • Brugen af ​​paginering forbedrer brugeroplevelsen, annonceindtægter og reducerer sidens indlæsningstid.

Ulemper ved sideinddeling

Selvom der er nogle stærke fordele ved paginering, men stadig undgår mange udviklere at bruge det. Sammen med nogle stærke fordele er der også få ulemper ved paginering, som er som følger:

  • Paginering i sig selv er en stor overhead i PHP, hvilket er en af ​​ulemperne ved paginering. Det er fuldstændig en overhead, da det er en ekstern funktion, der kan implementeres til omkostningerne ved uvedkommende Markup, Styling og logik. Et lille datasæt ignoreres ofte for at bruge paginering.
  • Sideinddeling kan forårsage lav sideplacering på søgemaskinen, fordi når en side er væk fra startsiden og kræver flere klik, får den normalt ikke en høj sideplacering.
  • Det begrænser også antallet af links, sociale delinger, det samlede antal resultater til at være synlige på websiden og ankertekst, som en side modtager, når informationen er delt over flere sider.
Du kan undgå brugen af ​​pagineringsteknik ved at ændre strukturen af ​​din navigationsopsætning.

Implementering af paginering med PHP og MySQL

For at implementere pagineringen kræver vi et stort datasæt for at anvende paginering på det. Derfor skal vi først oprette en database og tabel. Derefter skal du angive posterne i tabellen og begynde at kode for at oprette paginering. Således at data hentet fra databasen kan opdeles over flere sider.

Her vil vi introducere to eksempler på paginering. Første eksempel er et simpelt og grundlæggende eksempel på oprettelse af paginering uden CSS, hvorimod vi i andet eksempel vil oprette paginering på en attraktiv måde ved hjælp af CSS og bootstrap. Du kan se output for begge. Nedenfor er de trin, der er givet til oprettelse af paginering;

Enkle trin til at oprette paginering -

  1. Opret en database og tabel. Angiv en liste over poster i tabellen.
  2. Opret forbindelse til MySQL-databasen.
  3. Opret pagineringslinket for at opdele dataene på flere sider og tilføje dem til bunden af ​​tabellen.
  4. Hent data fra databasen og vis dem på flere sider.

Følg nedenstående trin et efter et og lav en simpel paginering.

Eksempel 1

Nedenstående kode er et simpelt eksempel på paginering, som udføres i PHP ved hjælp af MySQL-databasen. Den opdeler data hentet fra databasen på flere sider. I dette eksempel vil vi oprette pagineringen for alfabeter, der skal vises på flere sider.

Database oprettelse

Først og fremmest skal du oprette en database navngivet af paginering som vi lavede og en tabel inde i den hedder alfabet . Opret attribut efter navn id og alfabet , og angiv dataene i tabellen.

PHP paginering

Databaseforbindelse

At forbinde PHP-filen til databasen er en påkrævet opgave. Så du kan vise de data, der er gemt i databasen, på websiden. Tilslut derfor databasen i din PHP-fil for at vise data på websiden.

Du kan skrive databasetilslutningskode i den samme fil samt også holde den adskilt i en anden fil og inkludere den i din nødvendige PHP-fil. Kode til databaseforbindelse-

 $conn = mysqli_connect('localhost', 'root', ''); if (! $conn) { die('Connection failed' . mysqli_connect_error()); } else { mysqli_select_db($conn, 'pagination'); } 

I denne tutorial bruger vi mysqli udvidelse. Så alle forespørgsler er skrevet i henhold til mysqli-format.

Få det aktuelle sidenummer

Nedenstående kode bestemmer sidenummeret, som brugeren besøger i øjeblikket. Hvis det ikke er til stede, er det som standard sat sidenummer til 1.

 if (!isset ($_GET['page']) ) { $page = 1; } else { $page = $_GET['page']; } 

Formel for paginering

For paginering skal du indstille grænsen for antallet af poster, der skal vises pr. side. Her sætter vi grænsen for resultat pr. side til 10, så det vil blive vist på hver side som angivet nedenfor -

Side 1 - A til J (1-10)

Side 2 - K til T (11-20)

Side 3 - U til Z (21-26)

 $results_per_page = 10; $page_first_result = ($page-1) * $results_per_page; 

Få det samlede antal sider

 $query = 'select *from alphabet'; $result = mysqli_query($conn, $query); $number_of_result = mysqli_num_rows($result); //determine the total number of pages available $number_of_page = ceil ($number_of_result / $results_per_page); 

Hent data og vis på webside

Nedenstående kode bruges til at hente data fra databasen og vise på websiderne, der er opdelt i overensstemmelse hermed.

 $query = &apos;SELECT *FROM alphabet LIMIT &apos; . $page_first_result . &apos;,&apos; . $results_per_page; $result = mysqli_query($conn, $query); //display the retrieved result on the webpage while ($row = mysqli_fetch_array($result)) { echo $row[&apos;id&apos;] . &apos; &apos; . $row[&apos;alphabet&apos;] . &apos;<br>&apos;; } 

Vis linket til siderne i URL

Brug af denne kode vil webadressen til websiden ændre sig for hver side.

 for($page = 1; $page<= $number_of_page; $page++) { echo ' <a href="index2.php?page=" . $page ''>&apos; . $page . &apos;  &apos;; </=>

Endelig kode

Sæt nu alle koderne sammen i en enkelt fil for at afslutte paginering.

Fil: Index2.php

 Pagination <?php //database connection $conn = mysqli_connect('localhost', 'root', ''); if (! $conn) { die('Connection failed' . mysqli_connect_error()); } else { mysqli_select_db($conn, 'pagination'); } //define total number of results you want per page $results_per_page = 10; //find the total number of results stored in the database $query = 'select *from alphabet'; $result = mysqli_query($conn, $query); $number_of_result = mysqli_num_rows($result); //determine the total number of pages available $number_of_page = ceil ($number_of_result / $results_per_page); //determine which page number visitor is currently on if (!isset ($_GET['page']) ) { $page = 1; } else { $page = $_GET['page']; } //determine the sql LIMIT starting number for the results on the displaying page $page_first_result = ($page-1) * $results_per_page; //retrieve the selected results from database $query = 'SELECT *FROM alphabet LIMIT ' . $page_first_result . ',' . $results_per_page; $result = mysqli_query($conn, $query); //display the retrieved result on the webpage while ($row = mysqli_fetch_array($result)) { echo $row['id'] . ' ' . $row['alphabet'] . '</br>&apos;; } //display the link of the pages in URL for($page = 1; $page<= $number_of_page; $page++) { echo ' <a href="index2.php?page=" . $page ''>&apos; . $page . &apos;  &apos;; } ?&gt; </=>

Produktion:

Se nedenstående output for ovenstående pagineringseksempel -

PHP paginering

Eksempel 2

Nedenstående eksempel er et andet eksempel på paginering, hvor vi brugte CSS sammen med HTML for at gøre websidevisning mere attraktiv. CSS gør websiden mere kreativ og attraktiv. På den anden side gemmer MySQL dataene i databasen. Så du kan lære paginering meget bedre.

Vi har skrevet hele koden i en enkelt fil undtagen databaseforbindelse. Derfor vil vi oprette to filer, dvs. forbindelse.php og index1.php. Gem begge filer i .php udvidelse. I eksemplet nedenfor lærer du at skabe paginering mere kreativ og attraktiv.

streng java indeholder
    php:Skabt til databaseforbindelsephp:Skabt til paginering

Fil: forbindelse.php

 

Fil: index1.php

 Pagination table { border-collapse: collapse; } .inline{ display: inline-block; float: right; margin: 20px 0px; } input, button{ height: 34px; } .pagination { display: inline-block; } .pagination a { font-weight:bold; font-size:18px; color: black; float: left; padding: 8px 16px; text-decoration: none; border:1px solid black; } .pagination a.active { background-color: pink; } .pagination a:hover:not(.active) { background-color: skyblue; } <?php // Import the file where we defined the connection to Database. require_once 'connection.php'; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page=1; } $start_from = ($page-1) * $per_page_record; $query = 'SELECT * FROM student LIMIT $start_from, $per_page_record'; $rs_result = mysqli_query ($conn, $query); ?> <br> <p>This page demonstrates the basic Pagination using PHP and MySQL. </p> <table class="table"> <tr> <th>ID</th> <th>Name</th> <th>College</th> <th>Score</th> </tr> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> <?php $query = 'SELECT COUNT(*) FROM student'; $rs_result = mysqli_query($conn, $query); $row = mysqli_fetch_row($rs_result); $total_records = $row[0]; echo '</br>&apos;; // Number of pages required. $total_pages = ceil($total_records / $per_page_record); $pagLink = &apos;&apos;; if($page&gt;=2){ echo &apos;  Prev  &apos;; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" &lt;a class = " active' href="index1.php?page=" .$i.''>&apos;.$i.&apos;  &apos;; } else { $pagLink .= &apos;  &apos;.$i.&apos;  &apos;; } }; echo $pagLink; if($page<$total_pages){ echo ' next '; } ?> <input id="page" type="number" min="1" max placeholder required> Go function go2Page() { var page = document.getElementById(&apos;page&apos;).value; page = ((page&gt;)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p> <strong>Output:</strong> </p> <p>See the below output for above pagination example -</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-3.webp" alt="PHP Pagination"> <p>Note that code written inside the tag is used for styling and to give an attractive look to the table and pagination present inside the webpage. We also used bootstrap for this.</p> <h3>Explanation of code</h3> <p>Now, we will explain the code used for creating pagination.</p> <h3>Database creation</h3> <p>First of all, create a database named by <strong>pagination</strong> as we created and a table inside it named <strong>student</strong> . Create attribute by name <strong>Rank, Name, College,</strong> and <strong>Score</strong> , and provide at least 25 records in the table.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-4.webp" alt="PHP Pagination"> <h3>Database Connectivity</h3> <p>Connecting the PHP file to the database is a required task. In this tutorial, we are using <strong>mysqli</strong> extension. So, all the queries are written according to mysqli format.</p> <p>Database connectivity code can be written in the same file or you can also keep it separate into another file and include it to your required PHP file. Code for database connection-</p> <pre> $conn = mysqli_connect(&apos;localhost&apos;, &apos;root&apos;, &apos;&apos;); if (! $conn) { die(&apos;Connection failed&apos; . mysqli_connect_error()); } else { mysqli_select_db($conn, &apos;pagination&apos;); } </pre> <h3>Fetch data and display on webpage</h3> <p>As we have created dataset, now we need to fetch and display it to various webpages. The below code is used to retrieve the data from database and display on the webpages that are divided accordingly.</p> <h3>Fetch data</h3> <p>After establishing the database connection in &apos;connection.php&apos; file, we just need to import it into our code using require_once keyword. We will explicitly define the number of records per page to show.</p> <pre> require_once &apos;connection.php&apos;; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET[&apos;page&apos;])) { $page = $_GET[&apos;page&apos;]; } else { $page=1; } //determine the sql LIMIT starting number for the results on the displaying page $start_from = ($page-1) * $per_page_record; $query = &apos;SELECT * FROM student LIMIT $start_from, $per_page_record&apos;; $rs_result = mysqli_query ($conn, $query); </pre> <h3>Display data</h3> <p>This section is very simple. In this section, we iterate the loop over the records that we fetched and display each record stored in columns of the table.</p> <pre> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </pre> <h3>Pagination Link creation</h3> <p>Now the most important code is pagination link creation. So, we will create the Previous, Next, and numeric links for pagination and add them to bottom of the table.</p> <pre> if($page&gt;=2) { echo &apos;  Prev  &apos;; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" &lt;a class = " active' href="index1.php?page=" .$i.''>&apos;.$i.&apos;  &apos;; } else { $pagLink .= &apos;  &apos;.$i.&apos;  &apos;; } }; echo $pagLink; if($page<$total_pages){ echo ' next '; } < pre> <p>Without using CSS, the pagination will be created same as the screenshot below, which is similar to the example 1.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-5.webp" alt="PHP Pagination"> <p>After including CSS code into the index1.php file, the pagination will be looked like the screenshot below. In example 1, we have created simple pagination that was logically correct, but visually it is not so good. </p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-6.webp" alt="PHP Pagination"> <h3>Code for Random Moment</h3> <p>In case when the number of pages is too much, this code helps us for random moment. By entering the page number in the input field, a user can directly move to that page. This code is written in JavaScript.</p> <pre> function go2Page() { var page = document.getElementById(&apos;page&apos;).value; page = ((page&gt;)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p>Apart from all these codes, we have also included bootstrap into index1.php to make the table view good. This code is written inside the tag.</p> <pre> </pre> <hr></1)?1:page));></pre></$total_pages){></=$total_pages;></pre></1)?1:page));></$total_pages){></=$total_pages;>

Hent data og vis på webside

Da vi har oprettet datasæt, skal vi nu hente og vise det på forskellige websider. Nedenstående kode bruges til at hente data fra databasen og vise på websiderne, der er opdelt i overensstemmelse hermed.

Hent data

Efter at have etableret databaseforbindelsen i 'connection.php'-filen, skal vi blot importere den til vores kode ved at bruge nøgleordet require_once. Vi vil eksplicit definere antallet af poster pr. side, der skal vises.

 require_once &apos;connection.php&apos;; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET[&apos;page&apos;])) { $page = $_GET[&apos;page&apos;]; } else { $page=1; } //determine the sql LIMIT starting number for the results on the displaying page $start_from = ($page-1) * $per_page_record; $query = &apos;SELECT * FROM student LIMIT $start_from, $per_page_record&apos;; $rs_result = mysqli_query ($conn, $query); 

Vis data

Dette afsnit er meget enkelt. I dette afsnit itererer vi løkken over de poster, vi hentede, og viser hver post gemt i kolonner i tabellen.

 <tr> <td></td> <td></td> <td></td> <td></td> </tr> 

Oprettelse af sideinddelingslink

Nu er den vigtigste kode oprettelse af pagineringslinks. Så vi vil oprette de forrige, næste og numeriske links til paginering og tilføje dem til bunden af ​​tabellen.

 if($page&gt;=2) { echo &apos;  Prev  &apos;; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" &lt;a class = " active\' href="index1.php?page=" .$i.\'\'>&apos;.$i.&apos;  &apos;; } else { $pagLink .= &apos;  &apos;.$i.&apos;  &apos;; } }; echo $pagLink; if($page<$total_pages){ echo \' next \'; } < pre> <p>Without using CSS, the pagination will be created same as the screenshot below, which is similar to the example 1.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-5.webp" alt="PHP Pagination"> <p>After including CSS code into the index1.php file, the pagination will be looked like the screenshot below. In example 1, we have created simple pagination that was logically correct, but visually it is not so good. </p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-6.webp" alt="PHP Pagination"> <h3>Code for Random Moment</h3> <p>In case when the number of pages is too much, this code helps us for random moment. By entering the page number in the input field, a user can directly move to that page. This code is written in JavaScript.</p> <pre> function go2Page() { var page = document.getElementById(&apos;page&apos;).value; page = ((page&gt;)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p>Apart from all these codes, we have also included bootstrap into index1.php to make the table view good. This code is written inside the tag.</p> <pre> </pre> <hr></1)?1:page));></pre></$total_pages){></=$total_pages;>