php分页效果实现
PHP 分页效果实现
数据库查询与分页逻辑
分页的核心是通过 SQL 的 LIMIT 子句限制每次查询的数据量。假设每页显示 10 条数据,当前页码为 $page:
$itemsPerPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $itemsPerPage;
$sql = "SELECT * FROM articles LIMIT $offset, $itemsPerPage";
$result = $conn->query($sql);
计算总页数
需要查询总数据量以确定分页数量:

$totalItems = $conn->query("SELECT COUNT(*) FROM articles")->fetch_row()[0];
$totalPages = ceil($totalItems / $itemsPerPage);
生成分页导航
通过循环生成页码链接,并添加当前页高亮样式:
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>';
样式优化建议
为分页导航添加基础 CSS 样式:

.pagination {
margin: 20px 0;
}
.pagination a {
padding: 8px 12px;
border: 1px solid #ddd;
margin-right: 5px;
}
.pagination a.active {
background: #007bff;
color: white;
border-color: #007bff;
}
高级分页功能
对于大量数据可分页时显示部分页码:
$range = 2; // 当前页前后显示范围
echo '<div class="pagination">';
if ($page > 1) echo "<a href='?page=1'>«</a>";
for ($i = max(1, $page - $range); $i <= min($page + $range, $totalPages); $i++) {
$active = $i == $page ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a>";
}
if ($page < $totalPages) echo "<a href='?page=$totalPages'>»</a>";
echo '</div>';
AJAX 分页实现
通过 jQuery 实现无刷新分页:
$(document).on('click', '.pagination a', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
$.ajax({
url: 'load_data.php',
data: {page: page},
success: function(data) {
$('#content').html(data);
}
});
});






