luuanhquyen
22-03-2009, 20:48
Vấn đề phân trang thì hầu như bạn nào lập trình web động cũng phải trải qua, mình có đọc các code phân trang trước nhưng thực sự chưa hiểu lắm nên đã tạm thời tạo ra 1 code phân trang mới rất đơn giản nhưng vẫn hiệu dụng và đáp ứng tốt yêu cầu phân trang, nay post code lên đây các new bie có thể sử dụng. Tinh thần là kiến thức không của riêng ai, code này mình cũng chỉ dám nói là dành cho new bie cho nên là có gì củ chuối mọi người thẳng thắn phê bình. HEHE.
Đầu tiên thêm vào đầu trang đoạn code này:
<? include("dbconnect.php");
//* phan them vao
$start1 = $_GET['start'];
$sql = "SELECT COUNT(*) AS count2 FROM comments";
$result1 = mysql_query($sql);
while ($row1 = mysql_fetch_array($result1))
{
$count2 = $row1["count2"];
?>
Chú thích
$start1 = $_get['start'];
Câu lệnh này nhận biến start (biến trung gian) bắt đầu để đọc dữ liệu từ sql
Toàn bộ khối lệnh sau đó sẽ dùng để đếm số bản ghi có trong CSDL
Khi hiển thị dữ liệu mình sẽ giới hạn đọc từ bản ghi ở vị trí $start1 câu lệnh như sau:
$result = mysql_query("select * from comments order by id desc limit $start1,5") or
die (mysql_error()); //* Chỉ đọc dữ liệu limit từ $start1 và chỉ đọc 5 dòng
while ($row = mysql_fetch_array($result))
{
//* đây là phần hiện thị dữ liệu ra trang.
}
Cuối trang sẽ là phần thiết kế các nút chuyển trang :
------------
<? if (($start1 > 5) and ($start1 -5 >0))
<a href="comments.php?start=<? $start = $start1 -5; echo $start;?> ">BACK</a>
?>
Khi nhấn nút Back thì sẽ lùi giá trị $start1 đi 5 giá trị như vậy sẽ đọc 5 bản ghi trước
------------
<?
if (($start1 > 0) and ($start1 -5 <=0))
<a href="comments.php?start=0">BACK</a>
?>
Đoạn lệnh này để quay về đọc 5 bản ghi đầu tiên.
-----------
<?
if (($start1 < $count2) and ($count2 >$start1 +5))
<a href="comments.php?start=<? $start = $start1 +5; echo $start;?> ">NEXT</a>
?>
Khi nhấn nút NEXT thì sẽ tăng $start1 lên 5 giá trị như vậy sẽ đọc 5 bản ghi sau.
-----------
Điều kiện nằm trong IF nhằm đảm bảo phân trang trong tổng số bản ghi không chạy ra ngoài phạm vi tổng số bản ghi. Ví dụ như nếu có từ 0 đến 20 bản ghi thì chỉ giới hạn biến start trung gian min = 0 và max = 20 chứ biến start sẽ không thể <0 và >20.
Chú ý: theo cách làm này thì khi muốn vào trang hiện thị dữ liệu luôn luôn phải gán biến start = 0. Như vậy muốn hyperlink đến trang này phải dùng code html như sau:
<li><a href="comments.php?start=0" action="GET"><COMMENTS</a></li>
Dạng địa chỉ trên trình duyệt là:
http://luuanhquyen.info/comments.php?start=0
Vậy hiểu 1 cách đơn giản hơn code này hoạt động như sau:
Trang đọc dữ liệu là trang nhận biến trung gian từ ngoài vào (biến start) để quyết định đọc dữ liệu từ bản ghi nào.
Kết hợp với code html để thiết kế các nút NEXT và BACK tăng giảm biến START để điều khiển các bản ghi được đọc.
Hyperlink phải được gán giá trị start = 0.
Đếm tổng số bản ghi điều khiển biến start ko chạy ra ngoài phạm vi số lượng bản ghi.
Mình đảm bảo code này dù đơn giản vẫn đáp ứng các yêu cầu sau:
Phân trang được - tất nhiên.
Chạy ổn định, không có lỗi.
Hoàn toàn có thể chỉnh sửa code để nút back next có thể thay đổi thành số bản ghi ví dụ như là thay back next thành ..[1..5][6..10][11..15]..
Hoàn toàn có thể thay đổi số bản ghi được đọc trên mỗi trang.
...
Nói chung mình thấy vẫn chạy ổn và đơn giản. Điều duy nhất phải lưu ý là khi hyperlink đến trang phải thêm biến start giá trị bằng 0 như đã nói.
Khả năng diễn giải của mình có hạn có gì lủng củng sai sót các bro reply.
Đầu tiên thêm vào đầu trang đoạn code này:
<? include("dbconnect.php");
//* phan them vao
$start1 = $_GET['start'];
$sql = "SELECT COUNT(*) AS count2 FROM comments";
$result1 = mysql_query($sql);
while ($row1 = mysql_fetch_array($result1))
{
$count2 = $row1["count2"];
?>
Chú thích
$start1 = $_get['start'];
Câu lệnh này nhận biến start (biến trung gian) bắt đầu để đọc dữ liệu từ sql
Toàn bộ khối lệnh sau đó sẽ dùng để đếm số bản ghi có trong CSDL
Khi hiển thị dữ liệu mình sẽ giới hạn đọc từ bản ghi ở vị trí $start1 câu lệnh như sau:
$result = mysql_query("select * from comments order by id desc limit $start1,5") or
die (mysql_error()); //* Chỉ đọc dữ liệu limit từ $start1 và chỉ đọc 5 dòng
while ($row = mysql_fetch_array($result))
{
//* đây là phần hiện thị dữ liệu ra trang.
}
Cuối trang sẽ là phần thiết kế các nút chuyển trang :
------------
<? if (($start1 > 5) and ($start1 -5 >0))
<a href="comments.php?start=<? $start = $start1 -5; echo $start;?> ">BACK</a>
?>
Khi nhấn nút Back thì sẽ lùi giá trị $start1 đi 5 giá trị như vậy sẽ đọc 5 bản ghi trước
------------
<?
if (($start1 > 0) and ($start1 -5 <=0))
<a href="comments.php?start=0">BACK</a>
?>
Đoạn lệnh này để quay về đọc 5 bản ghi đầu tiên.
-----------
<?
if (($start1 < $count2) and ($count2 >$start1 +5))
<a href="comments.php?start=<? $start = $start1 +5; echo $start;?> ">NEXT</a>
?>
Khi nhấn nút NEXT thì sẽ tăng $start1 lên 5 giá trị như vậy sẽ đọc 5 bản ghi sau.
-----------
Điều kiện nằm trong IF nhằm đảm bảo phân trang trong tổng số bản ghi không chạy ra ngoài phạm vi tổng số bản ghi. Ví dụ như nếu có từ 0 đến 20 bản ghi thì chỉ giới hạn biến start trung gian min = 0 và max = 20 chứ biến start sẽ không thể <0 và >20.
Chú ý: theo cách làm này thì khi muốn vào trang hiện thị dữ liệu luôn luôn phải gán biến start = 0. Như vậy muốn hyperlink đến trang này phải dùng code html như sau:
<li><a href="comments.php?start=0" action="GET"><COMMENTS</a></li>
Dạng địa chỉ trên trình duyệt là:
http://luuanhquyen.info/comments.php?start=0
Vậy hiểu 1 cách đơn giản hơn code này hoạt động như sau:
Trang đọc dữ liệu là trang nhận biến trung gian từ ngoài vào (biến start) để quyết định đọc dữ liệu từ bản ghi nào.
Kết hợp với code html để thiết kế các nút NEXT và BACK tăng giảm biến START để điều khiển các bản ghi được đọc.
Hyperlink phải được gán giá trị start = 0.
Đếm tổng số bản ghi điều khiển biến start ko chạy ra ngoài phạm vi số lượng bản ghi.
Mình đảm bảo code này dù đơn giản vẫn đáp ứng các yêu cầu sau:
Phân trang được - tất nhiên.
Chạy ổn định, không có lỗi.
Hoàn toàn có thể chỉnh sửa code để nút back next có thể thay đổi thành số bản ghi ví dụ như là thay back next thành ..[1..5][6..10][11..15]..
Hoàn toàn có thể thay đổi số bản ghi được đọc trên mỗi trang.
...
Nói chung mình thấy vẫn chạy ổn và đơn giản. Điều duy nhất phải lưu ý là khi hyperlink đến trang phải thêm biến start giá trị bằng 0 như đã nói.
Khả năng diễn giải của mình có hạn có gì lủng củng sai sót các bro reply.