10/10/2018, 11:38
Cach phân trang trong PHP
Chào các bạn, tớ xin giới thiệu một cách đơn giản để phân trang trong PHP.
Giả sử ta có một CSDL là test với 1 bảng test bao gồm:
1. Trường id( auto_increment)
2. Trường name (varchar)
3. Trường address (varchar)
Câu lệnh truy vấn để hiển thị từng trang là:
select * from test limit $s,$p;
Trong đó $s là số thứ tự đầu tiên của trang thứ n, còn $p là số bản ghi hiển thị trong mỗi trang. Các bạn chú ý là số thứ tự bản ghi bắt đầu từ 0 (chứ không phải là 1)
Ví dụ: để view trang thứ 1 với số bản ghi là 5 thì câu lệnh là:
select * from test limit 0,5;
Đây là code phân trang. Có gì các bạn góp ý cho tớ.
Giả sử ta có một CSDL là test với 1 bảng test bao gồm:
1. Trường id( auto_increment)
2. Trường name (varchar)
3. Trường address (varchar)
Câu lệnh truy vấn để hiển thị từng trang là:
select * from test limit $s,$p;
Trong đó $s là số thứ tự đầu tiên của trang thứ n, còn $p là số bản ghi hiển thị trong mỗi trang. Các bạn chú ý là số thứ tự bản ghi bắt đầu từ 0 (chứ không phải là 1)
Ví dụ: để view trang thứ 1 với số bản ghi là 5 thì câu lệnh là:
select * from test limit 0,5;
Đây là code phân trang. Có gì các bạn góp ý cho tớ.
PHP Code:
<?php
//connect den server va co so du lieu
mysql_connect("localhost","admin","admin") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
//-------------------------------------------------
$qr=mysql_query("select * from test");//query den bang co ten la: test trong CSDL
$n_record=mysql_num_rows($qr);//so ban ghi cua bang
$p=5;//so bang ghi trong 1 trang can hien thi
//-------Ham tinh so trang-------------------------
function num_page()
{
global $n_record;//lay bien toan cuc
global $p;
if($n_record%$p==0)
{
$n_page=$n_record/$p;
return $n_page;
}
else
{
$n_page=($n_record-($n_record%$p))/$p+1;
return $n_page;
}
}
//-------------------------------------------------
function view_page()
{
global $n_record;
for($i=1;$i<=num_page();$i++)
{
echo "<a href='pages.php?n=".$i."'>".$i."</a><";
}
echo "<a href='pages.php?n=all'>All</a>";
}
//-------------------------------------------------
echo "<br>";
$n=$HTTP_GET_VARS***91;'n'***93;;//lay bien n tren trinh duyet
$s=($n-1)*$p; //thu tu cua bang ghi tai trang thu n
if ($n!='all')
{
$qr1=mysql_query("select * from test limit $s,$p") or die (mysql_error());
}
else
{
$qr1=mysql_query("select * from test");
}
//--------Hien thi bang-----------------------------
view_page();
echo "<table border=1 width=100%>";
while($row=mysql_fetch_array($qr1))
{
echo "<tr>";
echo "<td>".$row***91;'id'***93;."</td>";
echo "<td>".$row***91;'name'***93;."</td>";
echo "<td>".$row***91;'address'***93;."</td>";
echo "</tr>";
}
echo "</table>";
view_page();
?>
Bài liên quan
function num_page() {
global $n_record;//lay bien toan cuc
global $p;
$n_page = ($n_record%$p) ? ($n_record/$p + 1) : ($n_record/$p);
$n_page = (int) ($n_page);
return $n_page;
}
if($n_record%$p==0)
{
$n_page=$n_record/$p;
return $n_page;
}
//nếu $n_record chi hết cho $p thì: chia
-> kết quả là nguyên(vì chia hết)
else
{
$n_page=($n_record-($n_record%$p))/$p+1;
return $n_page;
}
cần gì viết nguyên 1 hàm
Ví dụ ỡ trường hợp ta có 100 kết quả trả về, ta muốn mổi trang chỉ hiễn thị 20 kết quả vị chi ta có 5 trang!
Trong mổi trang, tương ứng với mổi kết quả ta có một check box hay một nút radio.
Câu hỏi ở đây đặt ra rà nếu người dùng đầu thoạt đầu đả chọn một số kết quả rồi qua những trang khác chọn tiếp, chọn xong thì quay lại xem, xem xong thì đi chọn tiếp, chừng nào chán thì nhấn submit... Bằng cách nào em lưu trữ được tất cả kết quả mà người ta đả chọn!?
Giúp em với nha!
http://www.google.com.vn/search?q=ja...ient=firefox-a
Nếu có ai bik thì trình bày thuật toán bằng lời giùm mình ha!
- Biến $n_record phải dùng câu query "select count(*) from test" (như bạn @vothanhtamit đã nói)
- Hàm num_page viết phức tạp quá, chỉ cần dùng $n_page = ceil(count($n_record)/$p) là đủ
- Việc dùng global $n_record là không ổn, vì trong trường hợp một trang của mình có hai chỗ cần phân trang thì code của bạn không dùng được.
- Code cần tổ chức lại để dễ nhìn và có tính sử dụng lại.
- ... vẫn còn nhiều vấn đề khác nữa