首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 分頁類實作:支援表格輸出與自訂查詢

     編輯:PHP 相關知識

前言

分頁是 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(*) ...)、每頁筆數、目前頁碼。流程如下:

  1. 連線資料庫並設定 SET NAMES utf8。
  2. 執行 $query 取得總筆數 $this->countline。
  3. 計算總頁數 $this->countpage = ceil($this->countline / $maxline)。
  4. 修正 $page 不超過總頁數。
  5. 依頁碼計算 $startline、$prevpage、$nextpage。

主要公用方法

showpage():輸出分頁導航列

  • 顯示「共 X 筆、Y 頁」。
  • 首頁/上一頁連結(第一頁時停用)。
  • 頁碼區塊:預設顯示 10 個頁碼($listnum=10),採用「目前頁居中、兩側對稱」演算法,自動處理首尾邊界。
  • 下一頁/末頁連結(最後一頁時停用)。

showtable($query):直接輸出表格列

  • 自動在 SQL 尾端加上 LIMIT $startline, $maxline。
  • 逐列輸出 <tr><td>序號</td><td>欄位1</td>...</tr>。
  • 使用者只需在前後包裹 <table>...</table> 即可得到完整表格。

showresult($query):回傳結果資源供自訂輸出

若需自行設計表格樣式(如加入編輯/刪除按鈕、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 注入。
  • 建構子耦合資料庫連線:建議採用依賴注入,傳入已建立的 PDO 實例,提升可測試性。
  • 錯誤處理:原始碼使用 @ 抑制錯誤並 die(),生產環境應拋出例外、記錄日誌、顯示友善錯誤頁。
  • 分頁邏輯可抽離:分頁計算(總頁數、起始位移、頁碼區間)與資料庫存取應分離,符合單一職責原則。

總結

PageList 展示了經典的「分頁類」設計思維:封裝總筆數統計、頁碼計算、資料查詢與輸出。雖然底層 API 已過時,但其介面設計(showpage/showtable/showresult)仍具參考價值。現代專案建議搭配 PDO + 現代分頁套件(如 league/plate、knplabs/knp-paginator-bundle)或自行實作符合 PSR 標準的分頁元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved