分頁是 Web 應用中最常見的功能之一。本文介紹一個封裝良好的 PageList 類別,支援自動計算總頁數、產生分頁連結、直接輸出 HTML 表格列(<tr><td>),並提供彈性的 showresult() 方法讓開發者自行設計表格樣式。程式碼採用 MySQL 擴充函式(舊版),實務上建議改用 PDO 或 MySQLi。
class PageList {
private $link; // 資料庫連線資源
private $result; // 查詢結果資源
private $maxline; // 每頁筆數
private $page = 1; // 目前頁碼
private $startline = 0; // 起始記錄位移
private $countline; // 總筆數
public $countpage; // 總頁數
private $prevpage; // 上一頁頁碼
private $nextpage; // 下一頁頁碼
// 資料庫連線參數(建議改為常數或設定檔)
private $dbhost = DBHOST;
private $dbuser = DBUSER;
private $dbpasswd = DBPASSWD;
private $dbtable = DBTABLE;
}
__construct($query, $maxline, $page) 接受統計總筆數的 SQL(SELECT COUNT(*) ...)、每頁筆數、目前頁碼。流程如下:
SET NAMES utf8。$query 取得總筆數 $this->countline。$this->countpage = ceil($this->countline / $maxline)。$page 不超過總頁數。$startline、$prevpage、$nextpage。$listnum=10),採用「目前頁居中、兩側對稱」演算法,自動處理首尾邊界。LIMIT $startline, $maxline。<tr><td>序號</td><td>欄位1</td>...</tr>。<table>...</table> 即可得到完整表格。若需自行設計表格樣式(如加入編輯/刪除按鈕、CSS class),可呼叫此方法取得 mysql_result 資源,自行迴圈輸出。
<?php
// 1. 取得目前頁碼
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$maxline = 10;
// 2. 統計總筆數(建立物件)
$queryCount = "SELECT COUNT(*) FROM mailbox";
$pager = new PageList($queryCount, $maxline, $page);
// 3. 輸出分頁導航
$pager->showpage();
// 4. 查詢實際資料並輸出表格
$queryData = "SELECT username, name, quota, created, modified, active FROM mailbox ORDER BY created DESC";
echo "<table class='pagelist'>";
$pager->showtable($queryData);
echo "</table>";
?>
mysql_* 函式,PHP 7.0+ 已移除。實務請改用 PDO 或 MySQLi(Prepared Statements)防止 SQL 注入。@ 抑制錯誤並 die(),生產環境應拋出例外、記錄日誌、顯示友善錯誤頁。PageList 展示了經典的「分頁類」設計思維:封裝總筆數統計、頁碼計算、資料查詢與輸出。雖然底層 API 已過時,但其介面設計(showpage/showtable/showresult)仍具參考價值。現代專案建議搭配 PDO + 現代分頁套件(如 league/plate、knplabs/knp-paginator-bundle)或自行實作符合 PSR 標準的分頁元件。