PHP-如何过滤jQuery自动完成

PHP-如何过滤jQuery自动完成,php,jquery,Php,Jquery,我的脚本使用PHP,我使用jQuery autocomplete作为Web表单来注册事件。jQuery处理名称文本字段,并在选择名称后完成所有其他文本字段。但是,我的数据库存储了过去事件的所有记录。例如,Susan Boyle参加了我上次活动的5次,当我键入Susan时,名称文本字段将显示5次Susan Boyle。如何筛选出相同的名称 我的jQuery代码: $('input.item-autocomplete').on('autocompleteselect', function (e,

我的脚本使用PHP,我使用jQuery autocomplete作为Web表单来注册事件。jQuery处理名称文本字段,并在选择名称后完成所有其他文本字段。但是,我的数据库存储了过去事件的所有记录。例如,Susan Boyle参加了我上次活动的5次,当我键入Susan时,名称文本字段将显示5次Susan Boyle。如何筛选出相同的名称

我的jQuery代码:

  $('input.item-autocomplete').on('autocompleteselect', function (e, ui) {
  $.ajax({
  url:"ajax_reg.php",
  dataType:"json",
  data:{
    'name' : ui.item.value,
    'action' : 'get_fulldata'
  },
  success:function(data){
    $("#mobile1").val(data.mobile1);
    $("#mobile2").val(data.mobile2);
    $("#email").val(data.rt_email);
    $("#tf1").val(data.tf1);
    $("#tf2").val(data.tf2);
    $("#tf3").val(data.tf3);
    }
   });
});
更新:抱歉,我忘记了SQL代码,我正在另一个php文件中编写SQL。SQL代码adjax_reg.php

<?php
$name = $_GET['name'];
$action = empty($_GET['action'])?'':$_GET['action'];
if(empty($name)){
exit('No data');
}
require_once("../winphplib/kernel.php");
require_once ('../winphplib/dbconnect_egen.php');

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']);
    }
}elseif($action=='get_fulldata') {
$sqlquery = "SELECT * FROM reg_ticket WHERE rt_name = '$name' LIMIT 1";
$result = mysql_query($sqlquery) or die(mysql_error());
$data = mysql_fetch_assoc($result);
if(count($data)>0){
    list($data['mobile1'], $data['mobile2']) = explode("-", $data['rt_contact']);
    list($data['tf1'], $data['tf2'], $data['tf3']) = explode("-", $data['rt_ic']);
}

}
mysql_free_result($result); 
echo json_encode($data);

在PHP脚本中,只需通过添加GROUPBY子句来调整SQL查询

我没有看到您的查询,但类似于这样:

SELECT * FROM events
JOIN artists ON events.artist_id = artists.id
WHERE artist like :searchterm
GROUP BY artists.artist_name
select id, mobile1, mobile2, email, tf1, tf2, tf3
from users
where exists (select 1
              from participations
              where users.id = participation.user_id)
and users.name like '%Susan%'
您需要让用户了解他们至少参加过一次活动的标准。您可能正在使用事件加入用户,但需要根据用户的参与情况筛选用户。假设您正在使用下表:

usersid、mobile1、mobile2、电子邮件、tf1、tf2、tf3

eventsid,name

参与者id、用户id、事件id

您需要这样的查询:

SELECT * FROM events
JOIN artists ON events.artist_id = artists.id
WHERE artist like :searchterm
GROUP BY artists.artist_name
select id, mobile1, mobile2, email, tf1, tf2, tf3
from users
where exists (select 1
              from participations
              where users.id = participation.user_id)
and users.name like '%Susan%'
这将返回每个用户的记录,其中包含至少参加过一次活动的搜索文本,为您提供所需的列

编辑

我看了你编辑的问题,有很多问题需要解决

避免在查询中使用SELECT* 问题:

您可能有非常大的数据,这可能会浪费大量内存和时间 您可能正在将机密数据返回给用户 在select子句中使用列列表,以确保只选择所需内容:

select mobile1, mobile2, rt_contact, tf1, tf2, tf3, rt_ic ...
我会解决这个问题的

解决你的问题 您必须使用关键字

这将选择不同的值,但如果存在不一致,即同一个人的不同属性具有相同的名称,则将返回多条记录

如果没有类似功能,自动完成将无法工作 如果要选择其名称包含所传递文本的用户,则必须在中使用LIKE和%…%as。此外,如果名称不是唯一的,那么也可以选择名称,也可以选择id

mysql_uu函数已弃用 使用或函数代替

切勿使用查询中的用户输入 这很容易发生,而且黑客很容易对您的数据库造成伤害,甚至加载他们没有资格加载的数据。将参数化查询与PDO一起使用,或转义参数

不要写代码 如果将处理数据库的部分与引擎部分和视图部分分开,则代码更易于维护

规范化数据库
不在数据库中的数据库很少能正常工作,它们很难维护,容易出错,而且通常性能不好。

您需要发布PHP代码,并为我们提供更多关于您尝试执行的内容的上下文。我建议您在PHP中执行此操作,而不是在jquery中-随着数据库的增长,您将发送大量刚刚被过滤掉的数据。分享PHP是如何工作的,我们可能会给你一个如何做的想法。javascript调用phpIn作为PHP,您是否正在执行sql请求以获取数据?如果是的话,就按名字分组吧?您应该发布您的php以确保:是的,我是用php编写的,jQuery调用包含我的SQL命令的php文件。我的线程刚刚更新,很抱歉造成混乱。实际上我只有一个表来存储数据,这就是为什么它会导致许多名称冗余,需要帮助!DSITINCT解决了我的问题。然而,对我来说,修改数据库已经很困难了,因为它已经被使用了很多年,并且有太多的记录。@修改数据库将包括创建新表、动态复制初始数据库中的所有记录以及重构应用程序代码以使用新架构。迁移数据的所有困难都来自不一致和冗余,无论如何都应该解决这些问题。