【问题标题】:how to limit wildcard result to only what is typed如何将通配符结果限制为仅输入的内容
【发布时间】:2018-04-11 12:41:57
【问题描述】:

问题概述

我正在尝试从输入字段中选择以输入名称开头的所有名称

我的尝试

我有一个名为 onkeypress 的搜索功能,该功能从 html 表单中获取键入的文本并将其从进程发送到 php 页面。

我的问题

查询仅返回包含完整输入文本的结果,这实际上是我想要的,之后结果会扭曲我添加的包含搜索文本的某些部分并且我不想要的文本

程序代码

html表单

<input type="text" onkeypress="search(this.value)"/>
 <div id="search">
</div>

按键调用函数

 function search(val)
     {




            $.ajax({
                type:"POST",
                url:"lsearch.php",
                data:{
                        co:val,
                        co2:pgmid
                },
            success:function(data){
                //alert("complete");
                $("#search").html(data);
                },

            });
    }

php进程页面

$coname=$_POST['cof'];
$coun="select * from registration where full_name LIKE '$coname%'";
                                       $rcount2=mysqli_query($cons,$coun);

还上传了异常结果和预期结果的屏幕截图。

我得到了什么:

预期结果:

【问题讨论】:

  • 在搜索字符串中使用通配符; %但是需要改变你的逻辑,因为你很容易受到 SQL 注入攻击。研究参数化查询。
  • 能否请您正确解释一下。您收到的回复是什么,您正在寻找什么回复。
  • 我其实一开始就用了%操作符但是忘记展示了。完整的代码是这样的 $coun="select * from registration where full_name LIKE '%$conname%'
  • 您的查询 "$coun="select * from registration where full_name LIKE '$conname%' "将返回值以 $coname 开头的值。

标签: javascript php jquery database


【解决方案1】:

问题出在 PHP 进程页面上。在 LIKE 的两边使用 % 将返回包含在名称中的任何位置输入的值,而不仅仅是在开头。变化:

$coname=$_POST['cof'];
$coun="select * from registration where full_name LIKE '%$coname%' 

到:

$coname=$_POST['cof'];
$coun="select * from registration where full_name LIKE '$coname%' 

你应该得到你正在寻找的结果。

【讨论】:

  • 结果正常,但几秒钟后,整个事情又被扭曲了
  • 抱歉,这根本没有任何意义。当开始在搜索字段中输入内容时,将返回数据,并且随着他们继续输入更多的结果将被返回,从而缩小他们的选择范围。 Ajax 调用的成功分支是否替换了从 Ajax 查询返回新数据时显示的结果?
  • 是的,ajax 调用替换了 div 中显示的结果
  • 请向我们展示该代码(更新您的原始帖子)。根据您的描述,这实际上并没有发生。
  • 在你的成功函数中尝试document.getElementById('search').innerHTML = data;
【解决方案2】:

看这里:https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html

要匹配所有 Jonh、Johan、jojo、jorgio 等,请使用:

  select * from registration where full_name REGEX '^jo.*'

【讨论】:

  • 该示例应该适用于 Mysql 5.7+ 您使用的是什么数据库/版本?
  • mysql版本为5.6.26
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多