Tạo phân trang trong PHP và Mysql

Để hiểu hơn về ngôn ngữ PHP bạn sẽ phải thực hành nhiều bài tập với nó. Phân trang trong PHP là một phần kiến thức dành cho Newbie. Trong bài này bạn sẽ được hướng dẫn tạo ra một Pagenination rất đơn giản.

phan-trang-php

Bước 1: Trong thư mục htdocs mình sẽ tạo ra một thư mục nữa là hocphp trong đây sẽ có các file như connect.php, index.php và pagination.php

Đầu tiên bạn sẽ tạo ra file connect.php với nội dung

<?php  
$servername='localhost';
$username='root';
$password='';
$dbname = "data";
$conn=mysqli_connect($servername,$username,$password,$dbname);
if(!$conn){
die('Không thể kết nối Database:' .mysql_error());
}
?>

Bạn lưu ý hãy điền đúng cơ sở dữ liệu. Hiện tại của mình là “data”.

Bước 2: Xây dựng một tập tin là index.php với nội dung

  • Trước tiên khởi tạo một biến là $limit = 3;
  • Tiếp theo sử dụng isset để page=”.$i.” trong file pagination
  • $start sẽ bằng tích của ($page – 1) * $limit.
  • $result sẽ được sử dụng để lấy dữ liệu sau khi query vào Database
  • Cuối cùng sử dụng vòng lặp để in dữ liệu ra
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Phân trang trong PHP</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</head>
<body>
<?php  
include 'connect.php';
$limit = 3;  
if (isset($_GET["page"])) {
    $page  = $_GET["page"]; 
    } 
    else{ 
    $page=1;
    };  
$start = ($page-1) * $limit;  
$result = mysqli_query($conn,"SELECT * FROM posts ORDER BY id ASC LIMIT $start, $limit");
?>
<div class="container">
<table class="table table-bordered table-striped">  
        <thead>  
            <tr>  
                <th>ID</th>  
                <th>Tiêu đề</th>
                <th>Nội dung</th>
            </tr>  
        <thead>  
    <tbody>  
        <?php  
        while ($row = mysqli_fetch_array($result)) {  
        ?>  
                    <tr>  
                        <td><?php echo $row["id"]; ?></td>  
                        <td><?php echo $row["title"]; ?></td>
                        <td><?php echo $row["content"]; ?></td>           
                    </tr>  
        <?php  
        };  
        ?>  
    </tbody>  
</table>  
<?php include 'pagination.php';?>
</div>
</body>
</html>

Đến đây thì dữ liệu đã hiển thị lên trình duyệt nhưng vẫn chưa xuất hiện phân trang do là đang còn thiếu pagination.php

Bước 3: Ta sẽ viết code cho file này như sau

<?php  
    include 'connect.php';
    $limit = 3; 
    $result_db = mysqli_query($conn,"SELECT COUNT(id) FROM posts"); 
    $row_db = mysqli_fetch_row($result_db);  
    $total_records = $row_db[0];  
    $total_pages = ceil($total_records / $limit); 
    $pagLink = "<ul class='pagination'>";  
    for ($i=1; $i<=$total_pages; $i++) {
                  $pagLink .= "<li class='page-item'><a class='page-link' href='index.php?page=".$i."'>".$i."</a></li>";   
    }
    echo $pagLink . "</ul>";  
?>
  • Đầu tiên cũng phải tại ra $limit = 3;
  • $result_db là dữ liệu được query trong bảng posts
  • $row_db là dữ liệu mảng liên tục được lấy bằng cách dùng hàm mysqli_fetch_row()
  • $total_records là tổng records trong cơ sở dữ liệu
  • $total_pages là tổng số trang dùng hàm ceil để làm tròn số
  • Cuối cùng sử dụng vòng lặp từ 1, 2, 3… trang

Như vậy là bạn đã tạo ra được phân trang. Sau khi đọc xong ví dụ này bạn nên tự viết lại bằng cách không nhìn vào code theo cách hiểu của mình. Như vậy sẽ học PHP hiệu quả hơn. Chúc bạn thành công!

Cùng chủ đề

Chuyên mục:

Hãy để lại bình luận:

Mình rất vui khi bạn đã để lại một bình luận. Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *