實作從 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>
ceil(總筆數 / 每頁筆數)max(1, min($page, $totalPages)) 防止非法頁碼LIMIT offset, count,offset 從 0 開始http_build_query() 重組 URLhtmlspecialchars() 防 XSS/page/2 格式SELECT *,只查需要欄位;考慮游標式分頁<?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);
?>