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

PHP环境下如何过滤jQuery autocomplete重复名称

解决jQuery Autocomplete重复姓名的问题

你遇到的核心问题是数据库中同一用户的多条活动记录,导致Autocomplete返回了重复的姓名选项。我们可以从后端SQL查询或PHP数组处理两个层面快速解决这个问题,同时顺便帮你修复一个潜在的安全隐患。

一、最直接的方案:修改SQL查询去重

你的get_name动作对应的SQL没有做去重处理,所以同一个姓名会被多次返回。只需要给SELECT语句加上DISTINCT关键字,让数据库直接返回唯一的姓名即可:

if($action=='get_name'){
    // 添加DISTINCT关键字过滤重复姓名
    $sqlquery = "SELECT DISTINCT rt_name FROM reg_ticket WHERE rt_name LIKE '%$name%' LIMIT 15";
    $result = mysql_query($sqlquery) or die(mysql_error());
    while($myrow = MySQL_fetch_array($result)){
        $data[] = strtoupper($myrow['rt_name']);
    }
}

修改后数据库只会返回每个姓名一次,Autocomplete的下拉列表里就不会出现重复项了。

二、备选方案:PHP数组层面去重

如果因为业务原因无法修改SQL(比如后续需要关联其他字段),也可以在PHP中用array_unique()函数对返回的姓名数组去重:

if($action=='get_name'){
    $sqlquery = "SELECT rt_name FROM reg_ticket WHERE rt_name LIKE '%$name%' LIMIT 15";
    $result = mysql_query($sqlquery) or die(mysql_error());
    while($myrow = MySQL_fetch_array($result)){
        $data[] = strtoupper($myrow['rt_name']);
    }
    // 对数组去重
    $data = array_unique($data);
    // 重新索引数组,避免JSON结构异常
    $data = array_values($data);
}

重要安全提醒:修复SQL注入漏洞

你当前直接把$_GET['name']拼接到SQL语句里,存在严重的SQL注入风险!而且mysql_*系列函数早已在PHP 5.5后被废弃,建议尽快替换为mysqli预处理语句,示例如下:

// 假设已用mysqli连接数据库(替换原mysql_connect相关代码)
if($action=='get_name'){
    $sqlquery = "SELECT DISTINCT rt_name FROM reg_ticket WHERE rt_name LIKE ? LIMIT 15";
    $stmt = $conn->prepare($sqlquery);
    $searchName = "%$name%";
    $stmt->bind_param("s", $searchName);
    $stmt->execute();
    $result = $stmt->get_result();
    while($myrow = $result->fetch_assoc()){
        $data[] = strtoupper($myrow['rt_name']);
    }
    $stmt->close();
}

你的jQuery代码不需要任何修改,只要后端返回唯一的姓名列表,Autocomplete自然就不会显示重复选项了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:43:53