【问题标题】:Searching a MySQL table, using PHP, for multiple fields in an auto complete box使用 PHP 在 MySQL 表中搜索自动完成框中的多个字段
【发布时间】:2012-04-12 18:54:17
【问题描述】:

我正在尝试搜索表中的两个字段。 (数据库表包含鸡尾酒名称,以及它们的名称、成分和描述)当用户在搜索框中键入他们想要的词时,使用 Ajax/jquery 会给出自动完成的结果。

我已经让它搜索一个字段(名称),但似乎无法让它做更多的事情(名称和成分)。另一个问题是当给出结果时(它们作为链接给出)当你选择它们时,它会将数据放在输入框中,而不是把你带到下一页。

index.php:

<script>
$(document).ready(function(){
 $("#tag").autocomplete("autocomplete.php", {
        selectFirst: true
    });
});
</script>

    <label>Tag:</label>
    <input name="tag" type="text" id="tag" size="40"/>

自动完成.php:

<?php
    $q=$_GET['q'];
    $my_data=mysql_real_escape_string($q);
    $mysqli=mysqli_connect('localhost','ignitet1','password','ignitet1_WhatCocktail') or die("Database Error");
    $sql="SELECT Name FROM tblCocktail WHERE Name LIKE '%$my_data%' ORDER BY Name";
    $result = mysqli_query($mysqli,$sql) or die(mysqli_error());

    if($result)
    {
        while($row=mysqli_fetch_array($result))
        {
            echo "<a href=\"details.php\">";
            echo $row['Name']."," , "<br />";
            echo "</a>";
        }
    }
?>

任何帮助将不胜感激。

【问题讨论】:

  • 好吧,可以肯定的是,您只是在查询中寻找 valye 'Name" .. 所以这就是您将得到的全部内容.. 如果您有两个字段 Name 和 Ingredients 也许您应该将其包含在 select 语句中并修复 where 子句以执行 OR 子句。WHERE NAME LIKE '%$MY_DATA%' OR INGREDIENTS LIKE '%$MY_DATA%'

标签: php jquery mysql database autocomplete


【解决方案1】:

我不确定是否要强制链接到该页面,但为了对搜索进行快速而肮脏的修复,我会添加: OR Ingredients LIKE '%$my_dat%' 在 ORDER 子句之前。

更新:

user710502 关于查询中要选择的字段是正确的。至于自动完成,我查看了documentation,看起来您必须为自动完成选择事件创建一个自定义事件处理程序。当用户从下拉列表中选择一个选项时会触发此事件。默认行为(如您所知)是用“值”填充该字段。您添加的代码将如下所示:

$("#selector-for-field").bind('autocompleteselect',function(event,ui){
    event.preventDefault(); // this will stop the field from filling
    // maybe make the value sent from the serverside a hyperlink,
    // eg. http://www.wherever.com/you/want/the/item/to/link-to
    // then in here do something like:
    window.location(ui.item.value);
});

您必须仔细检查 ui.item.value 是否有效,因为我没有检查它。

【讨论】:

  • 我试过“从 tblCocktail 中选择名称和成分,其中名称如 %$my_data%' 或成分如 '%$my_data%'”;下拉框现在一直出现,但不显示结果
  • AND 不会去那里,它会像 ** SELECT NAME, INGREDIENTS FROM tblCocktail WHERE Name Name LIKE %$my_data%' OR Ingredients LIKE '%$my_data%'
  • 啊,确实解决了它不显示的问题,现在唯一的问题是,当点击代码时,它只是被放入文本输入框中,而不是像链接一样
  • 我用关于自动完成问题的信息更新了我的答案。我看到您是堆栈溢出的新手。如果我的答案是您正在寻找的答案,请单击它旁边的复选标记以“接受”它。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 2014-09-17
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2015-08-30
相关资源
最近更新 更多