PHP - 如何过滤jQuery自动完成

时间:2018-05-25 09:23:40

标签: php jquery

我的脚本使用的是PHP,我使用jQuery自动完成功能在webform上注册事件。 jQuery在var request = await _context.Request .Include(r => r.Emails) .ThenInclude(e => e.Tokens) .SingleOrDefaultAsync(r => r.Id == id); 文本字段上工作,并在选择名称后完成所有其他文本字段。

但是,我的数据库存储过去事件的所有记录。例如,Susan Boyle参加了我之前的5场比赛,当我输入name时,name文本字段将显示5位Susan Boyle。如何过滤掉相同的名称?

我的jQuery代码:

Susan

更新:抱歉,我忘记了SQL代码,我在另一个php文件中编写了SQL。 (SQL代码adjax_reg.php)

  $('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);
    }
   });
});

2 个答案:

答案 0 :(得分:1)

您需要获得users至少参加活动的标准。您可能正在users加入events,但您需要根据users过滤participation。假设您使用下表:

  

用户(id,mobile1,mobile2,email,tf1,tf2,tf3)

     

事件(id,name)

     

参与(id,user_id,event_id)

你需要这样的查询:

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 ...

将解决此问题。

解决您的问题

您必须使用distinct关键字

select distinct mobile1, mobile2, rt_contact, tf1, tf2, tf3, rt_ic ...

这将选择distinct值,但如果您有不一致的地方,即同一个人的同名姓名不同,那么您将返回多条记录。

如果没有LIKE

,自动完成将无效

如果您想要LIKE %...%包含您已通过的文字的用户,则必须使用ifselect,如同name一样。此外,如果select不唯一,name id以及name也可能不会受到影响。

不推荐使用

mysql_函数

改为使用PDOmysqli_功能。

永远不要在查询中使用用户输入

这很容易SQL Injection,黑客很容易对数据库造成伤害甚至加载他们没有资格加载的数据。使用参数化查询与PDO,或转义参数。

不要写Spaghetti代码

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

规范化您的数据库

不在normal form的数据库很少运行良好,很难维护,很容易出现redundancyinconsistency,而且它们通常效果不佳。

答案 1 :(得分:0)

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

我没有看到你的查询,但是这样的话:

SELECT * FROM events
JOIN artists ON events.artist_id = artists.id
WHERE artist like :searchterm
GROUP BY artists.artist_name