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

CRM系统分页筛选失效求助:翻页后筛选条件重置

解决CRM分页翻页时筛选条件丢失的问题

这个问题很典型——你的翻页链接里没有携带筛选参数,所以点击下一页/上一页时,后台无法获取之前的筛选条件,导致SQL查询回到了未筛选的状态。下面是具体的解决步骤和代码修改:

核心问题分析

你当前的翻页URL只传递了controller、action、cid和page这几个参数,但用户设置的5项筛选条件并没有被包含在链接里。当点击翻页时,$_GET里没有筛选参数,控制器中用来拼接筛选条件的$cont变量就变成了空值,最终执行的SQL就是未筛选的查询。

解决方案步骤

1. 确保控制器正确获取并保留筛选条件

首先,你需要在控制器中明确获取所有筛选参数(以下示例假设你的5项筛选是客户名称、邮箱、城市、状态、客服人员,你可以根据实际字段调整),并安全地组装到$cont中:

// 1. 获取所有筛选参数,默认空值防止报错
$searchName = $_GET['search_name'] ?? '';
$searchEmail = $_GET['search_email'] ?? '';
$searchCity = $_GET['search_city'] ?? '';
$searchState = $_GET['search_state'] ?? '';
$searchSupport = $_GET['search_support'] ?? '';

// 2. 安全组装筛选条件(务必做SQL注入防护!)
$cont = '';
if (!empty($searchName)) {
    // 用mysqli_real_escape_string转义用户输入,避免SQL注入
    $escapedName = mysqli_real_escape_string($db, $searchName);
    $cont .= " AND cu.customer_name LIKE '%{$escapedName}%'";
}
if (!empty($searchEmail)) {
    $escapedEmail = mysqli_real_escape_string($db, $searchEmail);
    $cont .= " AND cu.email LIKE '%{$escapedEmail}%'";
}
// 其他3项筛选条件按照同样的方式添加...

// 3. 分页逻辑保持不变
if (!isset($_GET['page']) or !is_numeric($_GET['page'])) {
    $page = 0;
} else {
    $page = (int)$_GET['page'];
}

// 后续的查询和数据组装保持不变
$customerslist = array();
$customers = $db->query("select cu.email, cu.notinterested, cu.version, cu.autoresponder, cu.customer_support, cu.verified, cu.verified_date, cu.customer_id, cu.customer_name, cu.address, cu.telephone_no, cu.email, cu.person_incharge, cu.designation, ct.city_name, st.state_name, emp.username from customers as cu left join state as st on st.id = cu.state left join city as ct on ct.id = cu.city left join tbllogin as emp on emp.employee_id = cu.customer_support where cu.customer_name!='' and cu.customer_support>0 and cu.company_id='".$cid."' ".$cont." ".$order_by." limit ".$page.",100");
foreach($customers->fetchAll() as $cl) {
    $customerslist[] = $cl;
}

2. 修改视图的翻页链接,携带所有筛选参数

在视图中,你需要把当前的所有筛选参数附加到翻页URL上。用http_build_query()自动拼接参数,能避免手动拼接出错:

<?php
// 收集所有需要传递的参数:固定参数+筛选参数
$baseParams = [
    'controller' => 'customers',
    'action' => 'index',
    'cid' => $cid,
    // 把当前的所有筛选参数加进来
    'search_name' => $_GET['search_name'] ?? '',
    'search_email' => $_GET['search_email'] ?? '',
    'search_city' => $_GET['search_city'] ?? '',
    'search_state' => $_GET['search_state'] ?? '',
    'search_support' => $_GET['search_support'] ?? ''
];

// 处理下一页链接
$nextt = $page + 100;
$nextParams = $baseParams;
$nextParams['page'] = $nextt;
$nextQuery = http_build_query($nextParams);
if ($sno > 100) echo '<a href="?'.$nextQuery.'"><b>Next</b></a>';

// 处理上一页链接
$prev = $page - 100;
$prevParams = $baseParams;
$prevParams['page'] = $prev;
$prevQuery = http_build_query($prevParams);
?>&nbsp;&nbsp;&nbsp;<?php if ($prev >= 0) echo '<a href="?'.$prevQuery.'"><b>Previous</b></a>';
?>

额外注意事项

  • SQL注入防护:永远不要直接把用户输入的参数拼接到SQL语句中,一定要用转义函数或者PDO预处理语句(更推荐),避免被攻击。
  • 通用化参数收集:如果筛选条件很多,可以用循环遍历$_GET,排除page、controller、action这些固定参数,自动收集所有筛选参数,后续新增筛选条件时不用修改翻页代码。
  • 表单回显:记得在筛选表单的输入框中回显当前的筛选值,比如<input type="text" name="search_name" value="<?php echo htmlspecialchars($_GET['search_name'] ?? ''); ?>">,这样用户翻页时能看到当前的筛选条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:13