Trang chủDiễn đànThư viện TutorialsTin tứcĐăng kýLiên hệ
DANH MỤC

QUẢNG CÁO


THỐNG KÊ
Số bài giảng: 211
Số chuyên mục: 35
Số thành viên: 649846
Lượt truy cập: 1246094
Đang online: 6744

Trang chủ >> Lập trình web động >> PHP
Thuật toán Phân trang PHP
Điều kiện trước khi đọc bài viết:
1. Bạn phải biết cách kết nối vào DB.
2. Bạn đã tạo sẵn 1 table và table này có chứa nhiều thông tin để chờ… phân trang


Bạn tạo file list.php (Hay tạo file nào đó cũng được) có code hoàn chỉnh như sau:




PHP Code:
<?php  $page = isset ( $_GET["page"] ) ? intval $_GET["page"] ) : 1
 
$rows_per_page 20
 
$page_start = ( $page ) * $rows_per_page
$page_end $page $rows_per_page
 
$sql_query mysql_query("SELECT * FROM table_name"); 
 
$number_of_page ceil mysql_num_rows$sql_query ) / $rows_per_page ); 
 if ( 
$number_of_page 

$list_page " <td> Trang: </td>"
 for ( 
$i 1$i <= $number_of_page$i++ ) 

if ( 
$i == $page 

$list_page .= " <td>[ <b>{$i}</b> ]</td> "

else 

$list_page .= "<td><a href=’list.php?page={$i}’> {$i} </a></td>"



 
$i 0
 while ( 
$result mysql_fetch_array $sql_query ) ) 

if ( 
$i >= $page_start 

print 
""

 
$i++; 
 if (
$i >= $page_end

break; 


 print <<<
EOF 
<table cellspacing="0" cellpadding="0" border="0"
<
tr
{
$list_page
</
tr
</
table
EOF
 
?>


Giải thích từng đoạn:
1. Cú pháp của đoạn này là:
Page = kiểm tra xem biến page có tồn tại hay không [?]
nếu tồn tại thì lấy giá trị của biến này và dùng hàm intval lọc dể nhận được giá trị an toàn [:]
còn nếu không thì sẽ có giá trị mặc định là 1

$page = isset ( $_GET["page"] ) ? intval ( $_GET["page"] ) : 1;
2. Số dòng trên 1 trang
$rows_per_page = 20;
3. Tính số dòng ở trang mở đầu dựa theo biến $page
$page_start = ( $page - 1 ) * $rows_per_page;
4. Tính số dòng ở trang cuối dựa theo biến $page
$page_end = $page * $rows_per_page;
Ví dụ về trang mở đầu và trang cuối theo công thức trên:
Giả sử trang đang xem hiện giờ là 1, ta đc: $page_start = (1 - 1) * 20 = 0
Còn $page_end = 1 * 20 = 20, vậy ta có giá trị 0 là mở đầu và 20 là kết thúc

5. Truy xuất vào table_name
PHP Code:
$sql_query mysql_query("SELECT * FROM table_name"); 
6. Tính toán số trang, cách làm như sau:
"mysql_num_rows( $sql_query )" là lấy tổng số dòng của table đã truy xuất [1]
"$rows_per_page" là bằng 20 (giá trị mà ta đặt ở trên) [2]
Lấy [1] chia cho [2] ta sẽ ra được số trang
Để làm tròn các giá trị từ (x.1 -> x.9 thành 1+x) ta dùng hàm ceil()




PHP Code:
$number_of_page ceil mysql_num_rows$sql_query ) / $rows_per_page ); 
7. Nếu số trang lớn hơn 1 thì sẽ tiến hành liệt kê các trang




PHP Code:
if ( $number_of_page 

$list_page " <td> Trang: </td>";  // Tiến hành in từng trang 
for ( $i 1$i <= $number_of_page$i++ ) 

// Nếu $i bằng $page hiện giờ sẽ in đậm để nhận biết đang xem trang nào 
if ( $i == $page 

$list_page .= " <td>[ <b>{$i}</b> ]</td> "

// Ngược lại… 
else 

$list_page .= "<td><a href=’list.php?page={$i}’> {$i} </a></td>"




8. Đặt biến $i bằng 0
$i = 0;
9. Liệt kê tất cả các dòng trong 1 table




PHP Code:
while ( $result mysql_fetch_array $sql_query ) ) 

// Nếu như số dòng liệt kê lớn hơn hoặc bằng $page_start thì sẽ in tiếp tục 
if ( $i >= $page_start 

print 
$result[noidung]; // Với field noidung là do bạn đặt, ở đây L chỉ ví dụ 
}  // Gia tăng giá trị $i theo từng dòng 
// Lúc đầu ta đặt biến $i là 0, vậy nếu có 4 dòng thì biến $i sẽ gia tăng cho đến khi bằng 4 
$i++; 
 
// Nếu như số dòng đang liệt kê lớn hơn $page_end thì sẽ kết thúc vòng lặp bằng "break" 
if ($i >= $page_end

break; 




10. Ở trên ta đã nạp nội dung cho biến $list_page, bây giờ thì in nó ra: (Design what to do )




PHP Code:
print <<<EOF 
<table cellspacing="0" cellpadding="0" border="0"
<
tr
{
$list_page
</
tr
</
table
EOF
Bài mới nhất cùng chuyên mục Xem bài tiếp theo
Bài 24: Lập trình AJAX (22-10-2010 | 06:59:41 PM)
Phân trang Php(Đẹp và tối) (27-06-2010 | 02:38:21 PM)
Vài kinh nghiệm PHP căn bản (09-09-2009 | 08:25:28 PM)
Tăng tốc độ xử lý CSDL MySQL (09-09-2009 | 08:24:34 PM)
Giữ bản quyền ảnh bằng watermark (09-09-2009 | 08:24:10 PM)
 
 
© Copyright 2009 SINHVIENIT.NET, All right reserved
Thư viện bài giảng nghành công nghệ thông tin SinhVienIT.Net  
Xây dựng và phát triển bởi các thành viên SinhVienIT.net
Liên hệ: Admin@SinhVienIT.Net | VuThanhLai@Gmail.Com
Ghi rõ nguồn http://sinhvienit.net khi sao chép bài ở đây.