【问题标题】:PHP MySQL autocompletePHP MySQL 自动完成
【发布时间】:2016-12-12 15:46:21
【问题描述】:

我有一个自动完成搜索字段,当用户输入名称时,结果会显示在下拉列表中。

这一切都很好,并按应有的方式显示数据。

但是,我正在等待将每个结果都设为链接,因此当显示结果时,用户可以点击正确的名称,然后将他们带到他们的个人资料中。

见下面的脚本:

<input type='text' id=employees class='form-control' size="80" placeholder="Search Employees by first or last name">

search.php

$searchTerm = $_GET['term'];

    $sql = mysql_query ("SELECT name_first, employee_id, unique_id, name_last FROM hr_employees WHERE name_first LIKE '{$searchTerm}%' OR name_first LIKE '{$searchTerm}%' OR employee_id LIKE '{$searchTerm}%'");
    $array = array();
    while ($row = mysql_fetch_array($sql)) {
        $array[] = array (

            'value' => $row['name_first'].' '.$row['name_last'].' ('.$row['employee_id'].')',

        );
    }
    //RETURN JSON ARRAY
    echo json_encode ($array);

选择正确的用户后,我希望用户重定向到 page.php?id=$employee_id

这可能吗?

JavaScript

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

JavaScript

<script>
$(function() {
$( "#employees" ).autocomplete({
source: 'search.php'
});
});
</script>

【问题讨论】:

  • 使用 $row['id'] 作为数组索引而不是 'value'。然后,您可以在客户端分离该信息。发布您的 JavaScript 代码以获取更多说明。
  • 不要使用已弃用的 mysql_* 函数。它们自 PHP 5.5 起已弃用,自 PHP 7 起完全删除。请改用 PDO 或 MySQLi。您也对 SQL 注入攻击持开放态度,应该使用准备好的语句(可以与 PDO 和 MySQLi 一起使用)。
  • @colburton - 谢谢,你能告诉我如何在答案中做到这一点吗?
  • 警告:如果您只是学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。你的用户参数不是properly escaped,有SQL injection bugs可以被利用。
  • 谢谢@tadman - 但是你对我的问题有什么答案吗?

标签: php mysql search


【解决方案1】:

根据要求:

PHP:

$pdo        = new \PDO('mysql:host=localhost;dbname=test', $user, $pass);
$searchTerm = $_GET['term'];

$stmt = $pdo->prepare("SELECT name_first, employee_id, unique_id, name_last FROM hr_employees WHERE name_first LIKE :search OR name_first LIKE :search OR employee_id LIKE :search");
$stmt->execute([':search' => $searchTerm.'%']);

$array = [];
while (false !== ($row = $stmt->fetch())) {
    $array[] = [
        'value' => $row['name_first'].' '.$row['name_last'].' ('.$row['employee_id'].')',
        'id'    => $row['id'],
    ];
}

echo json_encode($array);

JavaScript:

<script>
    $( "#employees" ).autocomplete({
        source: 'search.php',
        select: function( event, ui ) {
          window.location.href = 'page.php?id='+ui.item.id;
        }
    });
</script>

使用 console.log 代替位置更改:https://jsfiddle.net/dLe4a83x/

【讨论】:

  • 谢谢,我已将 JavaScript 添加到问题中
  • 那是 jQuery 吗?
  • 对不起,是它的 JQuery。更新问题
  • 感谢您的更新,但它似乎不起作用,下拉菜单中现在没有显示任何内容
  • 你注意到了吗,我已经改回“价值”,因为这是 jQuery 在这里所期望的。
【解决方案2】:

在这里,您可以使用 JQuery UI 库在自动完成搜索中进行导航 PHP 和 Mysql 中的自动完成搜索。这是工作代码:

HTML 表单:

<form>
    <input id="dd_user_input" class="search_form" type="text" value="Type your Input Here"/>
</form>

Javascript 代码:

$(function() {

  $("#dd_user_input").autocomplete({
    source: "global_search.php?cityId=28",
    minLength: 2,
    select: function(event, ui) {
      var getUrl = ui.item.id;
      if (getUrl != '#') {
        location.href = getUrl;
      }
    },

    html: true,

    open: function(event, ui) {
      $(".ui-autocomplete").css("z-index", 1000);
    }
  });

});

这里提到了位置href,因此用户可以在单击此链接时进行导航。在这里,您可以通过查询填充的 JqueryUI 获取 getUrl 的数据。供参考,您可以查看:https://www.discussdesk.com/autocomplete-search-in-php-mysql-json-with-navigation.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2012-02-08
    相关资源
    最近更新 更多