Chương này giải thích cách hiển thị kết quả truy vấn của bạn vào trong nhiều trang và cách tạo link điều hướng hay còn gọi là phân trang PHP
Nó luôn luôn có thể là truy vấn lệnh SQL SELECT của bạn có thể tạo hàng nghìn record. Nhưng việc hiển thị tất cả record này trên một trang không bao giờ là ý tưởng tốt. Vì thế chúng ta có thể phân chia kết quả này thành nhiều trang khác nhau theo yêu cầu của bạn.
Phân trang PHP là gì ?
Phân trang (Paging) PHP nghĩa là truy vấn của bạn cho kết quả trong nhiều trang, thay vì chỉ đặt chúng ở trong một trang dài.
MySQL giúp đỡ việc phân trang PHP bởi sử dụng mệnh đề LIMIT mà sẽ nhận hai tham số. Tham số đầu tiên là OFFSET và tham số thứ hai là số lượng record nên được trả về từ Database.
Dưới đây là ví dụ đơn giản để lấy record bởi sử dụng mệnh đề LIMIT để thực hiện phân trang.
Ví dụ
Bạn thử ví dụ sau để hiển thị 10 record mỗi trang.
<html>
<head>
<title>Phân trang trong PHP</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'tennguoidung';
$dbpass = 'matkhau';
$rec_limit = 10;
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Không thể lấy dữ liệu: ' . mysql_error());
}
mysql_select_db('test_db');
/* lấy tổng số bản ghi */
$sql = "SELECT count(emp_id) FROM employee ";
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Không thể lấy dữ liệu: ' . mysql_error());
}
$row = mysql_fetch_array($retval, MYSQL_NUM );
$rec_count = $row[0];
if( isset($_GET{'page'} ) )
{
$page = $_GET{'page'} + 1;
$offset = $rec_limit * $page ;
}
else
{
$page = 0;
$offset = 0;
}
$left_rec = $rec_count - ($page * $rec_limit);
$sql = "SELECT emp_id, emp_name, emp_salary ".
"FROM employee ".
"LIMIT $offset, $rec_limit";
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Không thể lấy dữ liệu: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "ID :{$row['emp_id']} <br> ".
"Tên nhân viên : {$row['emp_name']} <br> ".
"Lương : {$row['emp_salary']} <br> ".
"--------------------------------<br>";
}
if( $page > 0 )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?page=$last\">10 bản ghi trước</a> |";
echo "<a href=\"$_PHP_SELF?page=$page\">10 bản ghi kế tiếp</a>";
}
else if( $page == 0 )
{
echo "<a href=\"$_PHP_SELF?page=$page\">10 bản ghi kế tiếp</a>";
}
else if( $left_rec < $rec_limit )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?page=$last\">10 bản ghi trước</a>";
}
mysql_close($conn);
?>
</body>
</html>