PHP分页开发:如何保持下拉框选中的每页记录数在分页跳转时不重置
问题根源
- 你当前的每页行数
rowno仅从POST请求中获取,而分页导航是GET跳转链接,跳转时没有携带rowno参数,导致新页面加载时rowno被重置为默认值10 - 前端回显选中值时只读取POST的
rowno,分页跳转后POST无对应值,下拉框自然恢复默认选中10
修复步骤
步骤1:调整rowno的获取逻辑,跨请求保持用户选择
如果项目全局没有开启session,先在PHP代码最顶部添加一行开启session的代码,再修改rowno的获取逻辑:
// 全局没开session的话加这行,放在PHP代码最顶部 session_start(); $currentpage = isset($_GET['currentpage']) ? $_GET['currentpage'] : 1; // 优先取当前请求的rowno,不存在则取之前存储的,仍不存在则默认10 $rowno = $_REQUEST['rowno'] ?? $_SESSION['rowno'] ?? 10; // 把用户选择的行数存入session,跨请求持久化 $_SESSION['rowno'] = $rowno; $no_of_records_per_page = $rowno;
这里用$_REQUEST可以同时接收下拉框选择提交的POST参数、分页跳转携带的GET参数。
步骤2:给所有分页跳转链接拼接rowno参数
修改所有分页导航的跳转地址,带上当前选择的每页行数:
// 上一页按钮 if($currentpage >= 2) { echo "<a class='nav_a' href='viewreg.php?currentpage=".($currentpage - 1)."&rowno=".$rowno."'>-Previous-</a>"; } // 页码按钮 for($i = 1; $i <= $totalpages; $i++) { echo '<a class="nav_a" href = "viewreg.php?currentpage='.$i.'&rowno='.$rowno.'">'.'| '.$i.' '.'</a>'; } // 下一页按钮 if($currentpage < $totalpages) { echo "<a class='nav_a' href='viewreg.php?currentpage=".($currentpage + 1)."&rowno=".$rowno."'>-Next-</a>"; }
步骤3:优化下拉框选中回显(可选,比前端JS回显更稳定)
直接在后端输出option的时候判断是否选中,不需要依赖JS回显,兼容性更好:
<select class="name" id="rowno" name="rowno"> <option value='all' hidden disabled <?php if($rowno == 'all') echo 'selected'; ?>>All</option> <option value='10' <?php if($rowno == 10) echo 'selected'; ?>>10</option> <option value='15' <?php if($rowno == 15) echo 'selected'; ?>>15</option> <option value='20' <?php if($rowno == 20) echo 'selected'; ?>>20</option> <option value='25' <?php if($rowno == 25) echo 'selected'; ?>>25</option> <option value='30' <?php if($rowno == 30) echo 'selected'; ?>>30</option> </select>
如果使用了这种后端直接输出选中状态的方式,可以删掉原来JS里回显选中值的逻辑,避免冲突。
额外优化建议
你当前的SQL语句直接拼接了$startfrom和$no_of_records_per_page变量,存在SQL注入风险,建议改成参数绑定的方式传入这两个值,不要直接拼接到SQL字符串中。
内容的提问来源于stack exchange,提问作者Ndongesit Edet
相关产品推荐
相关产品推荐

