PHP MySQL自动完成

3

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

这一切都很好地工作,并按照应该显示的数据来显示。

我想把每个结果变成一个链接,让用户可以在显示结果时点击正确的名称,然后跳转到他们的个人资料页面。

请参见以下脚本:

<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>

2
不要使用已弃用的 mysql_* 函数。自 PHP 5.5 起已被弃用,自 PHP 7 起已完全删除。请改用 PDO 或 MySQLi。您还容易受到 SQL 注入攻击,应该使用 Prepared Statements(可以在 PDO 和 MySQLi 中使用)。 - M. Eriksson
3
警告:如果你正在学习PHP,请不要使用mysql_query接口。它非常糟糕和危险,已经在PHP 7中被删除。像PDO不难学习这样的替代方案以及像PHP之道这样的指南可以解释最佳实践。你的用户参数没有正确转义,存在可以利用的SQL注入漏洞 - tadman
谢谢@tadman - 但是你有没有回答我的问题? - Shane
谢谢@MagnusEriksson - 但是你对我的问题有任何答案吗? - Shane
你正在使用哪个JavaScript来触发自动完成?请将其添加到你的问题中。 - John Joseph
显示剩余2条评论
2个回答

3
如你所需:
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。 - Shane
那是jQuery吗? - colburton
抱歉,是 JQuery。问题已更新。 - Shane
你有没有注意到,我已经改回了“value”,因为这是jQuery在这里期望的。 - colburton
好的,我已经添加了一个fiddle来找出问题所在。现在它可以工作了。 - colburton
显示剩余3条评论

0

在这里,您可以使用JQuery UI库来制作自动完成搜索中的导航Autocomplete search in PHP and 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);
    }
  });

});

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接