php实现分页
PHP实现分页的基本方法
使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM table_name LIMIT $offset, $perPage";
$result = $conn->query($sql);
计算总页数
获取总记录数并计算总页数,用于生成分页导航。

$totalSql = "SELECT COUNT(*) as total FROM table_name";
$totalResult = $conn->query($totalSql);
$totalRow = $totalResult->fetch_assoc();
$totalPages = ceil($totalRow['total'] / $perPage);
生成分页导航链接
创建分页导航HTML,包含页码链接和上一页/下一页按钮。
echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page='.($page - 1).'">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page='.$i.'"'.($i == $page ? ' class="active"' : '').'>'.$i.'</a>';
}
if ($page < $totalPages) {
echo '<a href="?page='.($page + 1).'">下一页</a>';
}
echo '</div>';
使用预处理语句防止SQL注入
改进查询方式,使用预处理语句提高安全性。

$stmt = $conn->prepare("SELECT * FROM table_name LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $perPage);
$stmt->execute();
$result = $stmt->get_result();
分页样式优化
添加CSS样式美化分页导航,提高用户体验。
.pagination {
margin: 20px 0;
text-align: center;
}
.pagination a {
display: inline-block;
padding: 8px 16px;
margin: 0 4px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
.pagination a:hover:not(.active) {
background-color: #ddd;
}
分页类封装
创建可重用的分页类,简化分页逻辑。
class Pagination {
private $page;
private $perPage;
private $total;
public function __construct($total, $perPage = 10) {
$this->page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$this->perPage = $perPage;
$this->total = $total;
}
public function getOffset() {
return ($this->page - 1) * $this->perPage;
}
public function getLimit() {
return $this->perPage;
}
public function render() {
$totalPages = ceil($this->total / $this->perPage);
$html = '<div class="pagination">';
if ($this->page > 1) {
$html .= '<a href="?page='.($this->page - 1).'">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
$html .= '<a href="?page='.$i.'"'.($i == $this->page ? ' class="active"' : '').'>'.$i.'</a>';
}
if ($this->page < $totalPages) {
$html .= '<a href="?page='.($this->page + 1).'">下一页</a>';
}
$html .= '</div>';
return $html;
}
}






