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
相关产品推荐
相关产品推荐

