Php 使用单个输入框搜索多个参数的Ajax

Php 使用单个输入框搜索多个参数的Ajax,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,正在尝试实现类似的搜索。这将基于城市、地区、属性名称和建筑商名称搜索属性。现在有一个较小的版本,它只搜索我附加城市名称的地区名称 $(document).ready(function(){ //alert("Entered"); $("#searchId").keyup(function() { var searchbox = $(this).val(); var dataString = 'searchword=

正在尝试实现类似的搜索。这将基于城市、地区、属性名称和建筑商名称搜索属性。现在有一个较小的版本,它只搜索我附加城市名称的地区名称

$(document).ready(function(){
        //alert("Entered");
        $("#searchId").keyup(function() 
        {
        var searchbox = $(this).val();
        var dataString = 'searchword='+ searchbox;

        if((searchbox=='') || (searchbox=='e.g') )
        {
            //$('#display').css('display') == 'none';
            $('#display').hide();
        }
        else
        {   

            if("#searchId".length>3)
        {
            $.ajax({
            type: "POST",
            url: "search.php",
            data: dataString,
            cache: false,
            success: function(html)
            {
                $("#display").html(html).show();    

                $(".name").click(function(){
                                    //  alert($(this).text());
                                            $("input#searchId").val($(this).text());
                                            $('#display').hide();
                                }); 
             }          
            });

        }
        }return false;    

        });                 

        });
在search.php中,我有这样的查询

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where locality_name like '%$q%' or city_name like '%$q%' order by locality_id LIMIT 5");
但我希望它的功能类似于给定的链接。下拉列表应显示所选标准的名称及其前面的类型(例如:Pune(标准)city(类型))。我如何编写sql语句和ajax/jquery函数来实现此功能??

编辑: 为输入框添加HTML

 <input type="text" autocomplete="off" class="homeinput ac_input" title="Search" id="searchId" name="SearchValue" value="e.g lodha new cuffe parade, thane mumbai" onFocus="if(this.value=='e.g lodha new cuffe parade, thane mumbai') this.value='';" onBlur="if(this.value=='') this.value='e.g lodha new cuffe parade, thane mumbai';">


谢谢您的时间。

我认为您最好使用两种不同的MySQL搜索。像

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where locality_name like '%$q%' order by locality_id LIMIT 5");
然后第二个

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where city_name like '%$q%' order by locality_id LIMIT 5");

然后使用php将两个查询的结果与每行末尾的[type]关联起来。您的jQuery实际上不需要更改。

在查看下面的代码之前,需要注意以下几点:

  • 这看起来非常容易受到SQL注入的影响。在插入到这个查询之前,如果看不到您的PHP代码和要做的事情,$q…我要说的就是:小心。如果您不验证$q的输入,我所要做的就是键入:“';DROP TABLE localies;”注意,这在技术上是不可行的,因为mysql_query只支持单个命令,但风险仍然存在
  • 此查询类型不允许您使用索引,并且执行速度可能非常慢。考虑在$Q之前移除%,允许MySQL使用索引,或者切换到具有部分字索引能力的全文引擎。如果这张桌子足够大,速度可能会很慢
但是,这是正确的方法:

(
    SELECT
      'Locality' AS `type`,
       `locality_name` AS `name`
    FROM
       `locality`
    WHERE
       `locality_name` LIKE '%$q%'
)
UNION ALL
(
    SELECT
       'City' AS `type`,
       `city_name` AS `name`
    FROM
       `cities`
    WHERE
       `city_name` LIKE '%$q%'
)

那有什么问题?SQL或jQuery?@charlietfl为输入框添加了html。Thanks@ZeeTee如果需要的话,我需要两个tweeks,但不知道该怎么做。谢谢你看一下。只需要一个html输入?用户在哪里输入其他字段?如果您有一个完整的表单,您可以通过ajax轻松提交,使用
serialize()
收集所有表单数据它是一个搜索框,一个搜索框没有多个输入字段。当用户在输入框中键入值时,我在keyup事件上调用上述jquery函数。我添加的链接可能有助于更好地理解我!!如果可能的话,请在这里看一看。谢谢你的回复。我目前正在实现类似的目标。我想,如果你看一下上面提到的链接,它会更清晰。它允许使用逗号分隔的值搜索多个字段。同时,它会在下拉列表中获取它们所属的类型。如果我不够清晰,请原谅。这是再次链接,感谢你指出威胁。你能解释一下吗,因为我是个新手学习这些东西。我会尝试一下并接受答案。已经投票通过。:)@sachintaware当然,威胁基本上是,在不使用某些函数(例如)验证查询输入的情况下,您允许恶意用户将您的查询更改为他们可能希望的任何查询。例如,如果我有“SELECT*FROM MyTable WHERE MyColumn=$input”,其中$input来自表单字段,那么我站点上的恶意用户可以输入字符串“1或1=1”,这将使我的查询“SELECT*FROM MyTable WHERE MyColumn=1或1=1”,这当然会返回所有数据行。明白了!!谢谢你们的投入,继续努力。干杯!我试过了,但没有达到预期的效果。我想在搜索城市时也显示位置。例如,如果我搜索普纳,结果应该是Pune-city和它下面的Pune localities,比如wakad locality wagholi locality。我尝试在它上面使用连接,但没有成功,因为它会带来一些奇怪的结果。这是我尝试的查询
(选择*,“Location”为“type”,Location\u name为来自Location的名称内部连接Location上的城市。city\u id=cities.city\u id,其中Location\u name如“Pune”)联合所有(选择*,“city”为“type”,city\u name为来自Location上的城市内部连接Location.city\u id=cities.city\u id,其中city\u name如“Pune”)