PDA

View Full Version : Tach trang trong ung dung PHP& MysqL



anhcodon121
28-11-2009, 10:33
Khi viết web, việc truy cập vào MySQL để lấy dữ liệu và in nó ra trang PHP là chuyện cơm bữa. Nhưng bạn khi sao khi có đến khoảng 100 nghìn bản ghi. Bạn định in 100 nghìn bản ghi đó trong 1 trang PHP và bắt browser còng lưng để cõng một trang PHP với dung lượng cả mấy chục MB?
Để khắc phục chuyện đó, chúng ta cần phân thành nhiều trang và mỗi trang ta sẽ chỉ cần in ra vài chục records là đủ. Admin cũng đã từng có một bài về vấn đề này nhưng em thấy bác ấy coding rườm rà quá có thể khiến cho các newbie không hiểu. Em mới nghĩ ra được một đoạn code bình dân share cho các bác tham khảo.


<?php
///////////////////////////////////////////

// Code by Thanh Bình
// Email: hero_8490@yahoo.com
// Student of VietNam national university of HCM

////////////////////////////////////////////
function listpage()
{
Include(‘connect.php’)//file connect.php bạn viết lệnh kết nối tới MySQL và chọn database.
$r=mysql_query("select `username` from `member`"); //ví dụ tôi có trường username trong table member.
$totalrows=mysql_num_rows($r);
$pagesize=12;// Số bản ghi trong một trang
$totalpages=ceil($totalrows/$pagesize);
$paging='';//array of list page, ex: <<pre 1 2 3 4 next>>
if($totalrows==0)
{
echo "No entry was found !";
exit;
}
$howpage='';
$howpage=(int)($_GET['pag']);
//lấy giá trị của số trang hiện tại và convete nó sang int nhằm tránh hacker mò mẫm vào thanh address bar. Nếu jang hồ cố tình sửa giá trị thì nó tự động trở về 0
$host=$_SERVER['PHP_SELF'];
if(!$howpage || $howpage>$totalpages)
{
$howpage=1;
}

//Start printing list
$k=$howpage-1;
if($k<1)
{
$paging.="<<&nbsp;&nbsp;";
}else{
$paging.="<a href=\"$host?pag=$k\">"."<<"."</a>&nbsp;&nbsp;";
}
for($i=$howpage;$i<=$howpage+3;$i++)
{
if($i<=$totalpages){
if($i==$howpage)
{
$from=(($howpage-1)*$pagesize);
$r=mysql_query("select `username` from `member` limit $from, $pagesize");
while($row=mysql_fetch_array($r))
{

//Tùy yêu cầu sử dụng, ta sẽ thể hiện nội dung truy vấn được trong vòng lặp while này.
echo "<pre>";
echo $row['username'];
echo "</pre>";
}
}
$paging.="<a href=\"$host?pag=$i\">".$i."</a> &nbsp;&nbsp;";
}
}
$p=$howpage+4;
if($p>=$totalpages)
{
$paging.=">>&nbsp;&nbsp;";
}else{
$paging.="<a href=\"$host?pag=$p\">".">>"."</a>&nbsp;&nbsp;";
}
echo $paging;
//Biến paging chứa một mảng số thứ tự các trang và link của nó. Bạn có thể echo nó ở bất cứ đâu bạn muốn.
}
?>

chesterben
28-11-2009, 11:42
"Student of VietNam national university of HCM" :|
Hix, có cần vậy ko bác?! Em cũng là sv của VNNUHCM(US). Nói tí ko phải chứ bác nên train tiếng Anh nhiều nhiều hơn chút nữa.

thuyduongcd
28-11-2009, 12:42
Sính ngoại đến thế là cùng :D

anhtuannd
29-11-2009, 01:41
Hehe, cũng nên khen bác ấy 1 câu chứ, tut cơ bản nhất dành cho newbie.
Tuy nhiên:
+ Code nên đặt trong thẻ PHP
+ Bản quyền tiếng Anh còn ghi chú thì tiếng Việt
+ Dòng này:


$r=mysql_query("select `username` from `member`"); //ví dụ tôi có trường username trong table member.
$totalrows=mysql_num_rows($r);
nên sử dụng query: SELECT COUNT(*) FROM `member`.

Tại sao? mysql_num_rows chỉ nên sử dụng khi nào đã có sẵn kết quả truy vấn của query phục vụ cho việc xử lý những cái khác. Đừng select data ra chỉ để đếm, mà nên select luôn cái kết quả đếm. Thao tác đếm trên database nhanh hơn nhiều so với select data từ database rồi đếm trên PHP :buck: