Hướng dẫn dùng define stats trong PHP

PHP chủ yếu được sử dụng để lưu trữ và hiển thị dữ liệu từ cơ sở dữ liệu. Việc phân trang PHP giúp phân chia danh sách thành nhiều trang.

Điều này giúp cho giao diện web trở nên gọn gàng và dễ nhìn hơn. Hãy cùng tôi tìm hiểu kỹ hơn về phân trang PHP (Pagination PHP) thông qua các ví dụ 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 tất cả chúng lên một trang duy nhất.

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

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 sử dụng mệnh đề LIMIT trong MySQL. Mệnh đề này có hai đối số.

Đối số đầu tiên là OFFSET và đối số thứ hai là số bản ghi sẽ được trả về từ cơ sở dữ liệu.

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

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

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

Trong bài viết này, tôi sẽ giới thiệu 2 ví dụ về phân trang PHP Pagination.

Ví dụ đầu tiên khá cơ bản và đơn giản, phân trang mà không cần CSS (Cascading Style Sheet – tập tin định kiểu theo tầng).

Trong khi đó, ở ví dụ thứ 2, tôi sẽ sử dụng CSS và 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 cơ sở dữ liệu và bảng. Thêm danh sách các bản ghi vào bảng.
  2. Kết nối với cơ sở dữ liệu MySQL.
  3. Tạo liên kết phân trang để chia nhỏ dữ liệu trên nhiều trang và thêm chúng vào cuối bảng.
  4. Nạp dữ liệu từ cơ sở dữ liệu và hiển thị nó trên nhiều trang.

3. Ví dụ 1 về phân trang trong PHP

Đoạn mã dưới đây là một ví dụ khá đơn giản về code phân trang PHP với sự hỗ trợ của cơ sở dữ liệu MySQL.

Nó chia nhỏ dữ liệu được nạp từ cơ sở dữ liệu thành nhiều trang. Trong ví dụ 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 cơ sở dữ liệu

Trước tiên, tôi tạo một cơ sở dữ liệu được đặt tên pagination và một bảng bên trong nó có tên alphabet. Tạo thuộc tính theo tên id và alphabet, đồng thời cung cấp dữ liệu vào bảng.

Hướng dẫn dùng define stats trong PHP
Hướng dẫn dùng define stats trong PHP

Tạo cơ sở dữ liệu

Kết nối cơ sở dữ liệu

Bước tiếp theo là kết nối tệp PHP với cơ sở dữ liệu. Nhờ đó, dữ liệu được lưu trữ trong cơ sở dữ liệu sẽ được hiển thị lên trang web. Kết nối cơ sở dữ liệu trong tệp PHP để hiển thị dữ liệu lên trang web.

Bạn có thể viết mã kết nối cơ sở dữ liệu trong tệp đó hoặc để nó riêng biệt trong tệp khác và đưa nó vào tệp PHP được yêu cầu của bạn.

Mã kết nối cơ sở dữ liệu:

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

if (! $conn) {

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

}

else {

mysqli_select_db($conn, ‘pagination’);

}

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

Lấy số trang hiện tại

Đoạn code dưới đây xác định 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 cài đặt là 1.

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

$page = 1;

} else {

$page = $_GET[‘page’];

}

Công thức phân trang

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

Trang1 – A đến J (1-10)

Trang 2 – K đến T (11-20)

Trang3 – U đến Z (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 và hiển thị trên trang web

Đoạn code dưới đây được sử dụng để truy xuất dữ liệu từ cơ sở dữ liệu và hiển thị lên trang web đã đượ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’] . ‘
’;

}

Hiển thị liên kết của các trang trong URL

Sử dụng mã code này, URL của trang web sẽ thay đổi theo từng trang.

for($page = 1; $page<= $number_of_page; $page++) {

echo ‘’ . $page . ‘ ’;

Thành quả

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

Tệp: Index2.php

Pagination

//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’] . ‘
’;

}

//display the link of the pages in URL

for($page = 1; $page<= $number_of_page; $page++) {

echo ‘’ . $page . ‘ ’;

}

?>

Kết quả:

Dưới đây chính là kết quả của ví dụ phân trang ở trên

Hướng dẫn dùng define stats trong PHP
Hướng dẫn dùng define stats trong PHP

Kết quả sau khi phân trang trong PHP

4. Ví dụ 2 về code phân trang PHP

Dưới đây là một ví dụ khác về việc phân trang. Tuy nhiên, ở đây, tôi sử dụng CSS cùng với HTML để làm cho chế độ xem trang web trở nên thu hút hơn. CSS làm cho trang web trở nên sống động và hấp dẫn hơn.

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

Tôi sẽ viết toàn bộ đoạn code trong một tệp duy nhất ngoại trừ kết nối cơ sở dữ liệu. Chính vì thế, tôi sẽ tạo 2 tệp, một tệp là connection.php và tệp còn 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 ví dụ này, bạn sẽ học được cách tạo phân trang trở nên sáng tạo và hấp dẫn hơn.

  • php: Được tạo để kết nối cơ sở dữ liệu
  • php: Được tạo để phân trang

Tệp: connection.php

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

if (! $conn) {

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

}

else {

mysqli_select_db($conn, ‘pagination’);

}

?>

Tệp: index1.php

Pagination

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

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

?>


Pagination Simple Example

This page demonstrates the basic

Pagination using PHP and MySQL.

table-bordered”>

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

// Display each field of the records.

?>

};

?>

IDNameCollegeScore

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

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

$row = mysqli_fetch_row($rs_result);

$total_records = $row[0];

echo “
”;

// Number of pages required.

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

$pagLink = “”;

if($page>=2){

echo “  Prev ”;

}

for ($i=1; $i<=$total_pages; $i++) {

if ($i == $page) {

$pagLink .= “

.$i.”‘>”.$i.” ”;

}

else  {

$pagLink .= “

“.$i.” ”;

}

};

echo $pagLink;

if($page<$total_pages){

echo “  Next ”;

}

?>

placeholder=”” required>

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

}

Kết quả:

Dưới đây là kết quả của ví dụ phân trang này:

Hướng dẫn dùng define stats trong PHP
Hướng dẫn dùng define stats trong PHP

Kết quả sau khi phân trang Pagination PHP

Lưu ý, đoạn code được viết trong thẻ