php实现分页显示怎么实现
PHP实现分页显示的方法
在PHP中实现分页显示通常需要以下几个关键步骤:获取数据总数、计算总页数、处理当前页码、查询当前页数据并渲染分页导航。
数据库查询与分页逻辑
假设使用MySQL数据库,通过LIMIT子句实现分页查询:
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 每页显示数量
$perPage = 10;
// 获取当前页码(从URL参数获取,默认为1)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, $page); // 确保不小于1
// 计算偏移量
$offset = ($page - 1) * $perPage;
// 查询总记录数
$totalQuery = $conn->query("SELECT COUNT(*) as total FROM your_table");
$total = $totalQuery->fetch_assoc()['total'];
// 查询当前页数据
$query = $conn->query("SELECT * FROM your_table LIMIT $offset, $perPage");
$data = $query->fetch_all(MYSQLI_ASSOC);
计算总页数
根据总记录数和每页显示数量计算总页数:
$totalPages = ceil($total / $perPage);
生成分页导航
通过循环生成页码链接(基础版):
echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a>";
}
echo '</div>';
高级分页优化
添加上一页/下一页按钮和省略号逻辑:
echo '<div class="pagination">';
if ($page > 1) {
echo "<a href='?page=".($page-1)."'>上一页</a>";
}
// 显示页码范围(例如只显示前后3页)
$start = max(1, $page - 3);
$end = min($totalPages, $page + 3);
for ($i = $start; $i <= $end; $i++) {
$active = $i == $page ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a>";
}
if ($page < $totalPages) {
echo "<a href='?page=".($page+1)."'>下一页</a>";
}
echo '</div>';
完整示例代码
<?php
// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'database');
if ($conn->connect_error) die("连接失败: " . $conn->connect_error);
// 分页参数
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, $page);
// 获取数据
$offset = ($page - 1) * $perPage;
$totalQuery = $conn->query("SELECT COUNT(*) as total FROM your_table");
$total = $totalQuery->fetch_assoc()['total'];
$totalPages = ceil($total / $perPage);
$query = $conn->query("SELECT * FROM your_table LIMIT $offset, $perPage");
?>
<!-- 显示数据 -->
<table>
<?php while ($row = $query->fetch_assoc()): ?>
<tr>
<td><?= htmlspecialchars($row['column1']) ?></td>
<td><?= htmlspecialchars($row['column2']) ?></td>
</tr>
<?php endwhile; ?>
</table>
<!-- 分页导航 -->
<div class="pagination">
<?php if ($page > 1): ?>
<a href="?page=1">首页</a>
<a href="?page=<?= $page-1 ?>">上一页</a>
<?php endif; ?>
<?php for ($i = max(1, $page-3); $i <= min($totalPages, $page+3); $i++): ?>
<a href="?page=<?= $i ?>" <?= $i==$page?'class="active"':'' ?>><?= $i ?></a>
<?php endfor; ?>
<?php if ($page < $totalPages): ?>
<a href="?page=<?= $page+1 ?>">下一页</a>
<a href="?page=<?= $totalPages ?>">末页</a>
<?php endif; ?>
</div>
注意事项
- 务必对页码参数进行过滤和验证,防止SQL注入
- 考虑使用预处理语句替代直接拼接SQL
- 对于大型数据集,建议添加缓存机制
- 分页样式可通过CSS美化,如Bootstrap的pagination组件
通过以上方法可以构建一个基础但完整的分页系统,可根据实际需求扩展更多功能如每页显示数量选择器、AJAX分页加载等。







