Phân trang PHP là gì? 4 bước phân trang trong PHP bạn cần biết 2021

PHP chủ đạo được sử dụng để lưu trữ & hiển thị dữ liệu từ DataBase. Việc phân trang PHP giúp phân chia danh mục thành nhiều trang.

Điều này giúp cho giao diện website trở nên ngăn nắp & ưa nhìn hơn. Hãy cùng tôi tìm tòi kỹ hơn về phân trang PHP (Pagination PHP) thông qua các chẳng hạn minh họa nhé.

1. Phân trang PHP là gì?

Phân trang là việc hiển thị dữ liệu trên nhiều trang thay vì đặt toàn bộ chúng lên một trang duy nhất.

Phân trang còn hỗ trợ phân chia các bản ghi thành nhiều trang. Nhờ đó, người dùng sẽ dễ đọc & dễ hiểu các dữ liệu trên trang web.

Phân trang PHP là công việc của các developer PHP.  Các developer thực hiện công việc phân trang bằng cách dùng mệnh đề LIMIT trong MySQL. Mệnh đề này có hai đối số.

Đối số trước hết là OFFSET & đối số thứ hai là số bản ghi sẽ được trả về từ DataBase.

2. 4 bước phân trang bằng PHP & MySQL

Để thực hiện phân trang trong PHP, bạn cần cần phải có một Dataset (tập dữ liệu). Chính vì như thế, trước hết, bạn cần tạo thành một DataBase & bảng.

Kế tiếp, thêm các bản ghi vào bảng này & khởi đầu viết code để thực hiện phân trang. Để dữ liệu được nạp từ DataBase có thể được chia thành nhiều trang.

Trong nội dung này, tôi sẽ giới thiệu 2 chẳng hạn về phân trang PHP Pagination.

Chẳng hạn trước hết khá căn bản & dễ dàng, phân trang mà không cần CSS (Cascading Style Sheet – tập tin định kiểu theo tầng).

Trong lúc đó, ở chẳng hạn thứ 2, tôi sẽ sử dụng CSS & bootstrap để tạo phân trang.

Dưới đây là trình tự 4 bước để thực hiện phân trang trong PHP:

  1. Tạo DataBase & bảng. Thêm danh mục các bản ghi vào bảng.
  2. Connect với DataBase MySQL.
  3. Tạo link phân trang để chia nhỏ dữ liệu trên nhiều trang & thêm chúng vào cuối bảng.
  4. Nạp dữ liệu từ DataBase & hiển thị nó trên nhiều trang.

3. Chẳng hạn 1 về phân trang trong PHP

Đoạn mã dưới đây là một chẳng hạn khá dễ dàng về code phân trang PHP với sự trợ giúp của DataBase MySQL.

Nó chia nhỏ dữ liệu được nạp từ DataBase thành nhiều trang. Trong chẳng hạn này, tôi đã tạo phân trang cho bảng chữ cái để chúng hiển thị trên nhiều trang.

Tạo DataBase

Đầu tiên, tôi tạo một DataBase được đặt tên pagination & một bảng bên trong nó có tên alphabet. Tạo tính chất theo tên id & alphabet, song song phân phối dữ liệu vào bảng.

Connect DataBase

Bước kế tiếp là connect tệp PHP với DataBase. Nhờ đó, dữ liệu được lưu trữ trong DataBase sẽ được hiển thị lên trang website. Connect DataBase trong tệp PHP để hiển thị dữ liệu lên trang website.

Bạn có thể viết mã connect DataBase trong tệp đó hoặc để nó tách biệt trong tệp khác & mang nó vào tệp PHP được yêu cầu của bạn.

Mã connect DataBase:

$conn = mysqli_connect(‘localhost’, ‘root’, ”);

if (! $conn) {

die(“Connection failed” . mysqli_connect_error());

}

else {

mysqli_select_db($conn, ‘pagination’);

}

Trong nội dung này, tôi sử dụng tiện ích mở rộng mysqli. Vì vậy, toàn bộ các truy vấn đều được viết theo định dạng mysqli.

Lấy số trang bây giờ

Đoạn code dưới đây xác nhận số thứ tự trang mà người dùng hiện đang truy cập. Đặc biệt, nếu nó không được hiển thị thì theo mặc định, số trang sẽ được setup là 1.

if (!isset ($_GET[‘page’]) ) {

$page = 1;

} else {

$page = $_GET[‘page’];

Xem Thêm  Thêm cột vào bảng hiện có trong cơ sở dữ liệu SQL Server - thêm cột vào máy chủ sql bảng hiện có

}

Phương thức phân trang

Để phân trang, bạn cần đặt hạn chế số bản ghi được hiển thị trên một trang. Bước này, tôi setup hạn chế kết quả trên mỗi trang là 10, & kết quả được hiển thị trên mỗi trang như sau:

Trang1 – ? đến Ĵ (1-10)

Trang 2 – ₭ đến Ƭ (11-20)

Trang3 – ᑗ đến Ż (21-26)

$results_per_page = 10;

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

Nhận tổng số trang

$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);

Lấy dữ liệu & hiển thị trên trang website

Đoạn code dưới đây được sử dụng để truy xuất dữ liệu từ DataBase & hiển thị lên trang website đã được phân chia tương ứng.

$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>’;

}

Hiển thị link của các trang trong URL

Sử dụng gift code này, URL của trang website sẽ biến đổi theo từng trang.

for($page = 1; $pagevàlt;= $number_of_page; $page++) {

echo ‘<α href = “index2.php?page=’ . $page . ‘”>’ . $page . ‘ </a>’;

Thành tựu

& bước cuối cùng chính là để toàn bộ các đoạn code trên vào trong một tệp duy nhất.

Tệp: Index2.php

<htmlvàgt;

<headvàgt;

<titlevàgt; Pagination </titlevàgt;

</headvàgt;

<bodyvàgt;

<?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>’;

}

//display the backlink of the pages in URL

for($page = 1; $pagevàlt;= $number_of_page; $page++) {

echo ‘<α href = “index2.php?page=’ . $page . ‘”>’ . $page . ‘ </a>’;

}

?>

</bodyvàgt;

</htmlvàgt;

Kết quả:

Dưới đây chính là kết quả của chẳng hạn phân trang ở trên

php pagination

4. Chẳng hạn 2 về code phân trang PHP

Dưới đây là một chẳng hạn khác về việc phân trang. Không những thế, bước này, tôi sử dụng CSS cùng với HTML để khiến cho cơ chế xem trang website trở nên lôi kéo hơn. CSS khiến cho trang website trở nên sống động & cuốn hút hơn.

Mặt khác, MySQL lưu trữ dữ liệu trong DataBase. Chính vì như thế, thông qua chẳng hạn này, bạn có thể học thêm được nhiều tri thức hơn, ngoài phân trang PHP.

Tôi sẽ viết toàn thể đoạn code trong một tệp duy nhất loại trừ connect DataBase. Chính vì như thế, tôi sẽ tạo 2 tệp, một tệp là connection.php & tệp sót lại là index1.php. Lưu cả 2 tệp này trong phần trong phần mở rộng .php.

Thông qua chẳng hạn này, bạn sẽ học được cách tạo phân trang trở nên sáng kiến & cuốn hút hơn.

  • php: Được tạo để connect DataBase
  • php: Được tạo để phân trang

<?php

$conn = mysqli_connect(‘localhost’, ‘root’, ”);

if (! $conn) {

die(“Connection failed” . mysqli_connect_error());

}

else {

mysqli_select_db($conn, ‘pagination’);

}

?>

<htmlvàgt;

<headvàgt;

<titlevàgt;Paginationvàlt;/titlevàgt;

<backlink rel=”stylesheet”

href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>

<stylevàgt;

table {

border-collapse: collapse;

}

.inline{

display: inline-block;

float: right;

margin: 20px 0px;

}

input, button{

height: 34px;

}

.pagination {

display: inline-block;

}

.pagination α {

font-weight:bold;

font-size:18px;

color: black;

float: left;

padding: 8px 16px;

text-decoration: none;

border:1px solid black;

}

.pagination α.active {

background-color: pink;

}

.pagination α:hover:not(.active) {

background-color: skyblue;

}

</stylevàgt;

</headvàgt;

<bodyvàgt;

<centervàgt;

<?php

// Import the file where we defined the connection to Database.

Xem Thêm  Đặt kiểu trên Phần tử nội dung bằng JavaScript - thêm phong cách vào nội dung javascript

require_once “connection.php”;

$per_page_record = 4;  // Number of entries to show in α page.

// Look for α 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);

?>

<div class=”container”>

<brvàgt;

<divvàgt;

<h1vàgt;Pagination Simple Examplevàlt;/h1vàgt;

<ρvàgt;This page demonstrates the basic

Pagination using PHP and MySQL.

</ρvàgt;

<table class=”table table-striped table-condensed

table-bordered”>

<theadvàgt;

<trvàgt;

<th width=”10%”>IDvàlt;/thvàgt;

<thvàgt;Namevàlt;/thvàgt;

<thvàgt;Collegevàlt;/thvàgt;

<thvàgt;Scorevàlt;/thvàgt;

</trvàgt;

</theadvàgt;

<tbodyvàgt;

<?php

while ($row = mysqli_fetch_array($rs_result)) {

// Display each field of the records.

?>

<trvàgt;

<tdvàgt;<?php echo $row[“Rank”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“Name”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“College”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“Score”]; ?></tdvàgt;

</trvàgt;

<?php

};

?>

</tbodyvàgt;

</tablevàgt;

<div class=”pagination”>

<?php

$query = “SELECT COUNT(*) FROM student”;

$rs_result = mysqli_query($conn, $query);

$row = mysqli_fetch_row($rs_result);

$total_records = $row[0];

echo “</br>”;

// Number of pages required.

$total_pages = ceil($total_records / $per_page_record);

$pagLink = “”;

if($pagevàgt;=2){

echo “<a href=’index1.php?page=”.($page-1).”‘>  Prev </avàgt;”;

}

for ($ι=1; $ivàlt;=$total_pages; $ι++) {

if ($ι == $page) {

$pagLink .= “<a class = ‘active’ href=’index1.php?page=”

.$ι.”‘>”.$ι.” </avàgt;”;

}

else  {

$pagLink .= “<a href=’index1.php?page=”.$ι.”‘>

“.$i.” </avàgt;”;

}

};

echo $pagLink;

if($pagevàlt;$total_pages){

echo “<a href=’index1.php?page=”.($page+1).”‘>  Next </avàgt;”;

}

?>

</divvàgt;

<div class=”inline”>

<input id=”page” type=”number” min=”1″ max=”<?php echo $total_pages?>”

placeholder=”<?php echo $page.”/”.$total_pages; ?>” requiredvàgt;

<button onClick=”go2Page();”>Govàlt;/buttonvàgt;

</divvàgt;

</divvàgt;

</divvàgt;

</centervàgt;

<scriptvàgt;

function go2Page()

{

var page = document.getElementById(“page”).value;

page = ((pagevàgt;<?php echo $total_pages; ?>)?<?php echo $total_pages; ?>:((pagevàlt;1)?1:page));

window.location.href = ‘index1.php?page=’+page;

}

</scriptvàgt;

</bodyvàgt;

</htmlvàgt;

Kết quả:

Dưới đây là kết quả của chẳng hạn phân trang này:

(*4*)

Note, đoạn code được viết trong thẻ <stylevàgt; được sử dụng để tạo kiểu & giúp giao diện trở nên cuốn hút hơn cho bảng & phân trang hiển thị trong trang website đó. Tôi cũng từng từng sử dụng bootstrap để thực hiện điều này.

Giải thích mã

& lúc này, tôi sẽ giải thích cụ thể các đoạn code được sử dụng trong chẳng hạn này để tạo phân trang.

Tạo DataBase

Đầu tiên, tạo một DataBase có tên là pagination & một bảng bên trong nó có tên là student. Tạo tính chất có tên là Rank, Name, College, & Score & phân phối tối thiểu 25 bản ghi vào bảng.

code phân trang php

Connect DataBase

Trách nhiệm kế tiếp chính là connect tệp PHP với DataBase. Trong chẳng hạn này, tôi đã sử dụng tiện ích mở rộng mysqli. Vì vậy, toàn bộ các truy vấn đều được viết theo định dạng mysqli.

Bạn có thể viết đoạn mã connect DataBase trong tệp đó hoặc viết trong một tệp khác & mang nó vào tệp PHP được yêu cầu.

Đoạn mã để connect DataBase.

$conn = mysqli_connect(‘localhost’, ‘root’, ”);

if (! $conn) {

die(“Connection failed” . mysqli_connect_error());

}

else {

mysqli_select_db($conn, ‘pagination’);

}

Thu thập dữ liệu & hiển thị trên trang website

Khi đã tạo xong dataset, tôi cần nạp & hiển thị nó trên nhiều trang website. Đoạn code dưới đây được sử dụng để lấy dữ liệu từ DataBase & hiển thị lên các trang website được phân chia tương ứng.

Thu thập dữ liệu

Sau khoảng thời gian setup connect dữ liệu trong tệp “connection.php”, tôi cần nhập nó vào đoạn code bằng cách dùng keyword request_once. Tôi sẽ xác nhận cụ thể số lượng bản ghi hiển thị trên mỗi trang.

require_once “connection.php”;

$per_page_record = 4;  // Number of entries to show in α page.

// Look for α GET variable page if not found default is 1.

if (isset($_GET[“page”])) {

$page  = $_GET[“page”];

}

else {

$page=1;

}

//determine the sql LIMIT starting number for the results on the displaying page

$start_from = ($page-1) * $per_page_record;

$query = “SELECT * FROM student LIMIT $start_from, $per_page_record”;

$rs_result = mysqli_query ($conn, $query);

Hiển thị dữ liệu

Tôi sử dụng vòng lặp trong các bản ghi mà tôi đã tìm nạp & hiển thị mỗi bản ghi được lưu trữ trong các cột trong bảng.

<?php

while ($row = mysqli_fetch_array($rs_result)) {

// Display each field of the records.

Xem Thêm  Object.values ​​() Trong JavaScript - cách lấy giá trị của đối tượng trong javascript

?>

<trvàgt;

<tdvàgt;<?php echo $row[“Rank”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“Name”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“College”]; ?></tdvàgt;

<tdvàgt;<?php echo $row[“Score”]; ?></tdvàgt;

</trvàgt;

<?php

};

?>

Tạo link phân trang

Đoạn mã trọng yếu nhất chính là tạo link phân trang. Vì vậy, tôi sẽ tạo thành Previous, Next, & các link số & thêm chúng vào cuối bảng.

if($pagevàgt;=2) {

echo “<a href=’index1.php?page=”.($page-1).”‘>  Prev </avàgt;”;

}

for ($ι=1; $ivàlt;=$total_pages; $ι++) {

if ($ι == $page) {

$pagLink .= “<a class = ‘active’ href=’index1.php?page=”

.$ι.”‘>”.$ι.” </avàgt;”;

}

else  {

$pagLink .= “<a href=’index1.php?page=”.$ι.”‘>

“.$i.” </avàgt;”;

}

};

echo $pagLink;

if($pagevàlt;$total_pages){

echo “<a href=’index1.php?page=”.($page+1).”‘>  Next </avàgt;”;

}

Còn nếu như không sử dụng CSS, kết quả của việc phân trang PHP sẽ cũng giống như hình dưới đây (ở chẳng hạn 1)

kết quả của việc phân trang PHP

Sau khoảng thời gian mang mã CSS vào tập index1.php, kết quả của việc phân trang trong PHP sẽ cũng giống như hình dưới đây.  Trong chẳng hạn 1, tôi đã tạo phân trang dễ dàng & đúng về mặt lý thuyết, nhưng nhìn không cuốn hút lắm.

code phân trang trong php

5. Ưu thế của Phân trang PHP

Dưới đây là 3 ưu thế lớn nhất của PHP pagination:

  • Phân trang đem lại nhiều lợi nhuận cho các dự án có quy mô lớn. Bởi vì, nó khiến cho trang web trở nên chuyên nghiệp hơn. Không những thế, còn hỗ trợ trang web làm việc nhanh, đúng đắn & hiệu quả hơn
  • Nhờ phân trang, bạn có thể cải tổ vận tốc tải của một trang bằng cách chia dữ liệu ra thành nhiều trang. Bởi vì, trang web của bạn không cần phải tải quá nhiều thông tin cùng một lúc.

Chẳng hạn, nếu trang của bạn có 1000 hình ảnh thì hẳn nhiên thời gian tải sẽ lâu hơn khi chỉ chứa 50 hình ảnh. Bởi vì hàng ngàn hình ảnh thì sẽ cần hàng ngàn HTTP requests, thậm chí, điều này sẽ khiến trang của bạn không comment.

Sự cố này sẽ được khắc phục bằng cách hạn chế số lượng dữ liệu. Để làm được điều này, bạn cần sử dụng mệnh đề LIMIT khi thực hiện phân trang.

  • Sử dụng phân trang giúp cải tổ thử nghiệm người dùng, thu nhập marketing & tăng vận tốc tải trang.

6. Khuyết điểm của Phân trang trong PHP

Dù rằng phân trang PHP đem lại những ưu thế khẳng định nhưng nhiều developer vẫn tránh sử dụng nó. Bởi nó còn có một số giới hạn như sau:

  • Một trong những khuyết điểm lớn nhất của phân trang trong PHP chính là bản thân các trang được phân trang phải “cạnh tranh lẫn nhau”. Bởi vì chúng đều có chung các đặc tính bên ngoài như cấu tạo, kiểu trình bày & logic. Vì vậy, có thể xảy ra trường hợp một tập dữ liệu nhỏ có thể bị bỏ qua.
  • Phân trang có thể làm giảm thứ hạng của trang trên dụng cụ tìm kiếm. Bởi vì khi một trang càng ở xa trang chủ thì người dùng cần click chuột nhiều lần mới có thể truy cập vào nó. Những trang như thế thường không được xếp hạng cao.
  • Phân trang cũng làm hạn chế số lượng link, lượt chia sẻ trên các trang social, tổng số kết quả hiển thị trên trang website, anchortext mà trang thu được khi thông tin bị chia nhỏ ra thành nhiều trang.

Tổng kết

Mơ ước qua 2 chẳng hạn minh họa trên đây, bạn đã có thể hiểu hơn về phân trang PHP cũng như những ưu, khuyết điểm của nó.

Nếu bạn mong muốn đọc thêm về phân trang PHP, hãy đăng ký ngay 1 khóa học PHP online Ironhack Viet Nam để được chỉ dẫn cụ thể cũng như được trực tiếp thực hành nhé!

Viết một bình luận