Trong một trang web phân trang trong PHP và Mysql, là một trong những công việc hay gặp phải của lập trình viên PHP.
Phân trang sẽ cho người sử dụng xem được các bài viết khác. Ngoài việc tìm kiếm từ khóa thì phân trang giúp người sử dụng tìm kiếm được nội dung mình cần.
Sau đây là mã nguồn và hướng dẫn chi tiết cho phân trang trong PHP và Mysql

Contents
Trang hiện tại
Dùng hàm isset của php để kiểm tra xem trang hiện tại có tồn tại hay không, và ngược lại ta gán cho số trang = 1
1 2 3 4 5 |
if (isset($_GET['pageno'])) { $pageno = $_GET['pageno']; } else { $pageno = 1; } |
Công thức phân trang
(Số trang hiện tại – 1) * số bài viết trên một trang
1 2 |
$no_of_records_per_page = 10; // số bài viết trên một trang $offset = ($pageno-1) * $no_of_records_per_page; |
Tính tổng cộng số bài viết
1 2 3 4 |
$total_pages_sql = "SELECT COUNT(*) FROM table"; $result = mysqli_query($conn,$total_pages_sql); $total_rows = mysqli_fetch_array($result)[0]; $total_pages = ceil($total_rows / $no_of_records_per_page); |
Câu truy vấn cho phân trang
1 |
$sql = "SELECT * FROM table LIMIT $offset, $no_of_records_per_page"; |
Nút phân trang
Bao gồm nút (url) cho trang tiếp theo và trang trước, trang đầu tiên, trang cuối cùng
1 2 3 4 5 6 7 8 9 10 |
<ul class="pagination"> <li><a href="?pageno=1">First</a></li> <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>"> <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a> </li> <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>"> <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a> </li> <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li> </ul> |
Tất cả mã nguồn hoàn thành phân trang trong PHP và Mysql
Sau khi kết nối cơ sở dữ liệu(database), truy vấn được cơ sở dữ liệu, kết hợp với phương thức $_GET để lấy được trang hiện tại, chúng ta có được kết quả phân trang như sau:
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 |
<html> <head> <title>Pagination</title> <!-- Bootstrap CDN --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <?php if (isset($_GET['pageno'])) { $pageno = $_GET['pageno']; } else { $pageno = 1; } $no_of_records_per_page = 10; $offset = ($pageno-1) * $no_of_records_per_page; $conn=mysqli_connect("localhost","my_user","my_password","my_db"); // Check connection kiểm tra kết nối với cơ sở dữ liệu if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); die(); } $total_pages_sql = "SELECT COUNT(*) FROM table"; $result = mysqli_query($conn,$total_pages_sql); $total_rows = mysqli_fetch_array($result)[0]; $total_pages = ceil($total_rows / $no_of_records_per_page); $sql = "SELECT * FROM table LIMIT $offset, $no_of_records_per_page"; $res_data = mysqli_query($conn,$sql); while($row = mysqli_fetch_array($res_data)){ //here goes the data _ dữ liệu của bạn xuất hiện khi click nút phân trang tại đây } mysqli_close($conn); ?> <!-- đây là nút phân trang --> <ul class="pagination"> <li><a href="?pageno=1">First</a></li> <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>"> <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a> </li> <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>"> <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a> </li> <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li> </ul> </body> </html> |
Chúc các bạn thành công với chức năng phân trang trong php và mysql!