php分页需安全获取页码:用$_get['page'] ?? 1设默认值,filter_var验证整数,max(1,)限最小值;总页数ceil($total/$per_page)至少为1,当前页超限则min($page,$total_pages)拉回末页;url链接须用http_build_query保留原参数并注入page。

AI生成的PHP分页代码常漏掉页码参数(如 page),导致始终显示第1页。核心问题是没从 $_GET 安全读取当前页码,也没做默认值和范围校验。
补上安全的页码获取逻辑
不能直接写 $page = $_GET['page'],必须检查是否存在、是否为数字、是否大于0:
- 用
$_GET['page'] ?? 1提供默认值 - 用
filter_var(..., FILTER_VALIDATE_INT)验证整数 - 手动限制最小值为1,避免传入0或负数
修正总页数计算与边界判断
总页数 = ceil($total_records / $per_page),但必须确保结果至少为1,且当前页不能超过总页数:
- 若
$page > $total_pages,应自动跳转到末页($page = $total_pages) - 若
$total_pages === 0,说明无数据,页码应固定为1
链接URL中必须携带 page 参数
生成上一页、下一页、数字页码链接时,所有 href 都要显式拼接 ?page=2 或 &page=3:
- 已有其他参数(如
?category=php&sort=date)时,用http_build_query()重组URL更可靠 - 避免硬编码
?page=,防止丢失原有查询参数
加个简单示例片段
修复后的关键段落参考:
$page = filter_var($_GET['page'] ?? 1, FILTER_VALIDATE_INT) ?: 1; $page = max(1, $page); $per_page = 10; $total_records = 127; $total_pages = max(1, (int) ceil($total_records / $per_page)); $page = min($page, $total_pages); // 超出则拉回末页 // 构建带参URL(保留原参数) $base_url = strtok($_SERVER['REQUEST_URI'], '?') . '?' . http_build_query(array_merge($_GET, ['page' => '']));
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











