Error message

  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Notice: Undefined offset: 1 in nice_menus_block_view() (line 306 of /home/mamast08nv/public_html/sites/all/modules/nice_menus/nice_menus.module).

Phân trang PHP là thủ thuật được sử dụng bởi rất nhiều trang web và là tính năng cũng rất quan trọng. Đặc biệt với những trang web có nhiều nội dung cần hiển thị thì phân trang là phần không thể thiếu. Bạn không thể truy xuất tất cả dữ liệu mình có và hiển thị ra cùng một lúc được, cho nên những trang web hoạt động dựa trên CSDL phải được phân trang để hiển thị kết quả.

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: 

CODE

 

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 

phân trang php

<?php 
$page = isset ( $_GET["page"] ) ? intval ( $_GET["page"] ) : 1; 
$rows_per_page = 20; 
$page_start = ( $page - 1 ) * $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 > 1 ) { 
$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; 

?>

 

 


$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 

$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() 

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 

CODE

 

 

 

 

 

 

if ( $number_of_page > 1 ) 

$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 

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 )

CODE

     

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

 

 Xem thêm tài liệu php ở mục chia sẻ

Đào tạo lập trình chúc các bạn thành công

Tin tức khác:

 + Khóa học lập trình web php

 + Khóa học thiết kế web

 + Khóa đào tạo quản trị web