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

PHP 簡易分頁功能實作:MySQL 資料分頁顯示與頁碼導航完整代碼

     編輯:PHP 相關知識

功能概述

實作從 MySQL 讀取資料並分頁顯示,包含首頁、上一頁、頁碼顯示、下一頁、尾頁與跳轉輸入框功能。

完整程式碼

<?php
// 1. 資料庫連線(建議改用 PDO/MySQLi)
$conn = mysql_connect('localhost', 'username', 'userpwd') or die("連線失敗: " . mysql_error());
mysql_select_db('資料庫名稱');
mysql_query('SET NAMES utf8');

// 2. 取得總筆數
$sqlCount = "SELECT COUNT(*) AS total FROM user";
$rsCount = mysql_query($sqlCount);
$rowCount = mysql_fetch_assoc($rsCount);
$totalRows = $rowCount['total'];

// 3. 分頁參數設定
$pageSize = 10; // 每頁筆數
$totalPages = ceil($totalRows / $pageSize);

// 4. 取得目前頁碼
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
if ($page > $totalPages) $page = $totalPages;

// 5. 計算 OFFSET
$offset = ($page - 1) * $pageSize;

// 6. 查詢當頁資料
$sql = "SELECT * FROM user LIMIT $offset, $pageSize";
$result = mysql_query($sql);
$data = [];
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

// 7. 計算導航頁碼
$prevPage = max(1, $page - 1);
$nextPage = min($totalPages, $page + 1);
?>

<div id="wrap">
  <table border="1">
    <?php foreach ($data as $row): ?>
    <tr>
      <td><?= htmlspecialchars($row['id']) ?></td>
      <td><?= htmlspecialchars($row['username']) ?></td>
      <td><?= htmlspecialchars($row['pwd']) ?></td>
      <td>刪除 | 修改</td>
    </tr>
    <?php endforeach; ?>

    <tr>
      <td colspan="4" align="center">
        <a href="?page=1">首頁</a>
        <a href="?page=<?= $prevPage ?>">上一頁</a>
        <span><?= $page ?> / <?= $totalPages ?></span>
        <a href="?page=<?= $nextPage ?>">下一頁</a>
        <a href="?page=<?= $totalPages ?>">尾頁</a>

        <form method="get" style="display:inline">
          <input type="hidden" name="page" value="1">
          <input type="text" name="page" size="4" placeholder="頁碼">
          <input type="submit" value="跳轉">
        </form>
      </td>
    </tr>
  </table>
</div>

關鍵邏輯解析

  1. 總頁數計算:ceil(總筆數 / 每頁筆數)
  2. 頁碼邊界保護:max(1, min($page, $totalPages)) 防止非法頁碼
  3. LIMIT 語法:LIMIT offset, count,offset 從 0 開始
  4. 導航連結:保持其他 GET 參數(如搜尋條件)建議用 http_build_query() 重組 URL

安全性與改進建議

  • 棄用 mysql_* 函數:PHP 7+ 已移除,請改用 PDO 或 MySQLi(支援預處理語句,防 SQL 注入)
  • 輸出轉義:使用 htmlspecialchars() 防 XSS
  • 分頁類別化:將邏輯封裝為可重用的 Pagination Class
  • URL 美化:配合 URL Rewrite 使用 /page/2 格式
  • 大量資料優化:避免 SELECT *,只查需要欄位;考慮游標式分頁

PDO 版本核心片段

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", 'user', 'pwd');
$stmt = $pdo->prepare("SELECT COUNT(*) FROM user");
$stmt->execute();
$total = $stmt->fetchColumn();

$page = max(1, (int)($_GET['page'] ?? 1));
$perPage = 10;
$offset = ($page - 1) * $perPage;

$stmt = $pdo->prepare("SELECT id, username FROM user LIMIT ?, ?");
$stmt->bindValue(1, $offset, PDO::PARAM_INT);
$stmt->bindValue(2, $perPage, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved