You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP分页问题:切换页码后无法保留用户选择的每页记录数

CRM线索列表分页异常解决方案

问题根源

切换页码时,分页链接未携带用户选择的npp(每页记录数)参数,导致新页面无法从$_REQUEST['npp']获取有效值,进而分页逻辑失效,出现无数据的情况。而固定$perPageLimit时,无论请求参数是否存在,都有明确数值,所以分页正常。

解决步骤

1. 分页链接带上npp参数

找到Pagination类中生成页码链接的代码,将当前有效的npp值拼接进URL查询参数。示例代码:

// 先获取合法的npp值,带默认值和合法性校验
$allowedNpp = [5, 10, 20, 50];
$currentNpp = isset($_REQUEST['npp']) ? intval($_REQUEST['npp']) : 5;
if (!in_array($currentNpp, $allowedNpp)) {
    $currentNpp = 5;
}

// 生成分页链接时拼接参数
public function getPageLink($pageNum) {
    global $currentNpp;
    return "?page={$pageNum}&npp={$currentNpp}";
}

2. 初始化$perPageLimit时处理默认值与合法性

在列表页代码中,确保$perPageLimit始终有合法值:

$allowedNpp = [5, 10, 20, 50];
$perPageLimit = isset($_REQUEST['npp']) ? intval($_REQUEST['npp']) : 5;
// 校验参数合法性,避免恶意输入
if (!in_array($perPageLimit, $allowedNpp)) {
    $perPageLimit = 5;
}

3. 下拉框默认选中当前npp值

修改页面上的每页记录数下拉框,使其默认选中当前生效的npp,提升用户体验:

<form method="get">
    <select name="npp" onchange="this.form.submit()">
        <option value="5" <?php echo $perPageLimit == 5 ? 'selected' : ''; ?>>5条/页</option>
        <option value="10" <?php echo $perPageLimit == 10 ? 'selected' : ''; ?>>10条/页</option>
        <option value="20" <?php echo $perPageLimit == 20 ? 'selected' : ''; ?>>20条/页</option>
        <option value="50" <?php echo $perPageLimit == 50 ? 'selected' : ''; ?>>50条/页</option>
    </select>
    <!-- 隐藏域保留当前页码,避免切换每页记录数时回到第一页(可选) -->
    <input type="hidden" name="page" value="<?php echo $currentPage; ?>">
</form>

4. 确认Pagination类参数传递正确

实例化Pagination类时,确保将合法的$perPageLimit传入:

$totalRecords = // 从数据库查询得到的总记录数
$currentPage = isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1;
$pagination = new Pagination($totalRecords, $perPageLimit, $currentPage);

内容的提问来源于stack exchange,提问作者William Cannon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:35:09