【问题标题】:Ajax search for multiple parameters usng a single input boxAjax 使用单个输入框搜索多个参数
【发布时间】:2012-06-16 11:36:19
【问题描述】:

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

$(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(criteria) city(type)) .如何编写 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';">

感谢您的时间。

【问题讨论】:

  • 那么问题出在哪里? SQL 还是 jQuery?
  • @charlietfl 添加了输入框的html。谢谢
  • @ZeeTee 如果需要,我两个都需要 tweeks,不知道该怎么做。感谢您的关注。
  • 只有一个html输入?用户在哪里输入其他字段?如果您有完整的表单,您可以使用 serialize() 通过 ajax 轻松提交以收集所有表单数据
  • 它是一个搜索框,单个搜索框没有多个输入字段。当用户在输入框中输入值时,我在 keyup 事件上调用上述 jquery 函数。我添加的链接可能帮助更好地了解我!如果可能的话,请看看这里是proptiger.com

标签: php jquery mysql ajax


【解决方案1】:

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

  • 这看起来很容易受到 SQL 注入的影响。在插入此查询之前,无法查看您的 PHP 代码以及您要执行的操作 $q ...我只能说:小心。如果您不验证 $q 的输入,我所要做的就是输入:“'; DROP TABLE localities;” 请注意,这在技术上是行不通的,因为 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%'
)

【讨论】:

  • 感谢您指出威胁。您能否对此有所了解,因为我是学习这些东西的新手。我会尝试并接受答案。已经投票了。 :)
  • @sachintaware 当然,威胁基本上是,如果不使用某些功能(例如,mysqli_real_escape_string)验证对查询的输入,您会允许恶意用户将您的查询更改为他们可能想要的任何内容成为。例如,如果我有“SELECT * FROM MyTable WHERE MyColumn = $input”,其中 $input 来自表单字段,我网站上的恶意用户可以输入字符串“1 OR 1 = 1”,这将使我的查询“ SELECT * FROM MyTable WHERE MyColumn = 1 OR 1 = 1" 这当然会返回所有数据行。
  • 知道了!!感谢您的投入并继续努力。干杯!
  • 我试过这个,但我无法达到预期的结果。我想在搜索城市时也显示位置。例如。如果我搜索浦那,结果应该是 浦那市 和它下面的浦那地方,就像这个 wakad locality wagholi locality。我尝试使用加入它但没有奏效,因为它带来了一些奇怪的结果。
  • 这是我试过的查询( SELECT * , 'Locality' AS 'type', locality_name AS name FROM locality INNER JOIN cities ON locality.city_id = cities.city_id WHERE locality_name LIKE 'Pune' ) UNION ALL ( SELECT * , 'City' AS 'type', city_name AS name FROM cities INNER JOIN locality ON locality.city_id = cities.city_id WHERE city_name LIKE 'Pune' )
【解决方案2】:

我认为你最好有两个不同的 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 真的不需要改变。

【讨论】:

  • 感谢您的回复。我目前正在实现类似的目标。我认为,如果您查看提到的链接会更清楚。它允许使用逗号分隔值搜索多个字段。同时它也会在下拉列表中获取它们所属的类型。对不起,如果我不够清楚。这里是链接再次proptiger.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2017-09-24
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多