Phân trang trong ứng dụng PHP/MySQL

Một phần của tài liệu Xây dựng Website thông tin và diễn đàn học tập (Trang 41 - 50)

D. Sửdụng SQL để truy vấn dữ liệu trong PHP

E.Phân trang trong ứng dụng PHP/MySQL

Khi truy vấn dữ liệu mà nhận được một danh sách kết quả quá dài, người ta thường phải phân trang ứng dụng cho phù hợp (ít nhất là về mặt thẩm mỹ).

Nguyên tắc của việc phân trang ứng dụng như sau:

- Bước 1: Tính tóan số lượng bản ghi thỏa mãn điều kiện trả về ( thường sử dụng tóan tử count trong câu lệnh SQL).

- Bước 2: Xác định số lượng bản ghi sẽ hiển thị trên một trang.

- Bước 3: Dựa trên các thông tin có được từ bước 1 và 2, xác định được số trang cần hiển thị.

- Bước 4: Tính tóan số lượng bản ghi sẽ hiển thị tính từ trang nào đó do NSD lựa chọn (Sử dụng câu lệnh LIMIT).

Dưới đây tôi sẽ cung cấp cho các bạn 2 function,

- Function GetPageLinks ($Sql, $PageSize): Trả về một chuỗi văn bản chứa số trang hiển thị, với dữ liệu vào bao gồm câu lệnh SQL ($Sql) xác định số lượng bản ghi thỏa mãn điều kiện tìm kiếm, và "kích thước" của một trang ($PageSize)

Code:

function GetPageLinks($Sql,$PageSize) {

$result=mysql_query ($Sql);

if (!$result or mysql_num_rows ($result)==0) {

} else {

if ($Pages>1) { $PageLink="Trang "; for ($i=0;$i<=$Pages-1;$i++) { $j=$i+1; if ($j==$_GET["page"]) { $PageLink.=" {$j} | "; } else { $RestructGet=""; reset ($_GET);

while (list($key, $val) = each($_GET))

{ if ($key!='page') { $RestructGet.="&{$key}={$val}"; } } $RestructGet.="&page={$j}"; $RestructGet=substr($RestructGet,1);

$PageLink.=" <a href='?{$RestructGet}'>{$j}</a> | "; } } $PageLink=substr($PageLink,0,-2); } } return $PageLink; }

Hàm tiếp theo sẽ hiển thị danh sách các record của một trang nào đó, đồng thời demo cách sử dụng hàm GetPageLinks ở trên:

(VD dưới đây sử dụng một câu truy vấn lấy dữ liệu từ một bảng dulieu với một Category có id xác định:

function LoadList() {

if (isset($_GET["CatId"]) and is_numeric ($_GET["CatId"])) $Dieukien="where CatId={$_GET["CatId"]}"; // Cau lenh truy van chinh khi chua phan trang:

$Sql="Select * from dulieu {$Dieukien} "; // Tinh toan so luong ban ghi tra ve:

$PageSize=20;

$CountSQL="Select count(*) from dulieu {$Dieukien}"; $PageLinks= GetPageLinks ($CountSQL,$PageSize); if (isset ($_GET["page"]) and is_numeric ($_GET["page"])) {

$StartNum=$PageSize * ($_GET["page"]-1); // Xac dinh vi tri ban ghi bat dau }

else {

$StartNum=0; }

//Tiep tuc xay dung cau lenh truy van de lay du lieu theo trang $Sql.= " Limit {$StartNum}, {$PageSize}"; $result=mysql_query ($Sql);

if (!$result or mysql_num_rows ($result)==0) {

$tmp="Híc, tui chẳng mò được chi cả!"; }

else { (adsbygoogle = window.adsbygoogle || []).push({});

$tmp="{$PageLinks}";

//========== Hiển thị dữ liệu, các bạn tự viết cho phù hợp với yêu cầu $tmp.="{$PageLinks}";

} return $tmp;

CHƯƠNG HAI

PHÂN TÍCH NỘI DUNG WEBSITE HỌC TẬP

A.CẤU TRÚC VÀ GIAO DIỆN CỦA CHƯƠNG TRÌNH

1. Cấu trúc, giao diện của Website

PHẦN HAI: PHẦN NGHIỆP VỤ SƯ PHẠM

Bài soạn số 1

Trường: ĐHKTCN Thái Nguyên Năm học: 2008 Môn: Tin học Lớp MT04S – 032 Bài dạy: Biểu đồ bảng tính và chèn ảnh ( 1 tiết )

Cơ sở dữ liệu trên bảng tính ( 3 tiết ) ( thuộc giáo trình Tin học Đại Cương )

Ngày soạn: 09/05/2008

Người soạn: Dương Tiến Mạnh Ngày dạy:

CHƯƠNG I : LẬP KẾ HOẠCH DẠY HỌC

CÁC CÔNG VIỆC CHUẨN BỊ CHO SOẠN GIÁO ÁN

Một phần của tài liệu Xây dựng Website thông tin và diễn đàn học tập (Trang 41 - 50)