php - 自动完成 jQuery/PHP/MySQL 不返回结果

标签 php jquery mysql autocomplete

我是第一次使用 jQuery 自动完成功能。我创建了一个简单的数据库,其中包含多个用户名和一个简单的搜索框,用于练习我刚刚阅读的自动完成功能。我已经验证我的 mysql 查询在 mysql 中工作。我还验证了我已连接到数据库。我仍然无法让它自动建议条款。我认为(虽然不是 100% 肯定)我已经将我的问题与我使用 $_REQUEST['term'] 命令的方式隔离开来。所以有两个问题:我是否正确使用了这个命令,我的自动完成方式有问题吗?注意:我知道我还没有清理输入。我只是在练习自动完成的东西

附加信息“如果我取出 $_request 并查询所有用户,它将返回所有数据库用户的自动完成。无论我键入什么键,都会发生这种情况。这会让我相信它正在接收ajax 请求。

这是我的控制台显示的内容

enter image description here

这是我的actest.php

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>AutoComplete Test</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">

  <script> jQuery(document).ready(function($){
    $('#username').autocomplete(
        {source:'suggest_username.php',
        minLength:2
        });
    });
</script>


</form>
</head>
<body>

<form action="actest.php" method="POST">
    Enter Username:
    <input type="text" id="username" />

    <br />
    <input type="submit" value="Search" />


</body>
</html>

这是我的 suggest_username.php

<?php


// here we set the database information
$SERVER = 'localhost';
$USER = 'user';
$PASS = 'password';
$DATABASE = 'database';

// we are instantiating the mysqli database object
$db = new mysqli($SERVER, $USER, $PASS, $DATABASE);

// error check
if($db->connect_errno > 0){

      // report an error
die('Unable to connect to database [' . $db->connect_error . ']');
}



$rs = 'SELECT * FROM users WHERE user LIKE "($_REQUEST['term']) .'%'"';


$result = $db->query($rs);

$data = array();

    while ($row = $result->fetch_assoc()) 
    {
        $data[] = array(
            'label' => $row['user'] ,
            'value' => $row['user']
        );
    }


// jQuery wants JSON data
echo json_encode($data);
flush();

最佳答案

我建议这一行有一个语法错误:

$rs = 'SELECT * FROM users WHERE user LIKE "($_REQUEST['term']) .'%'"';

看起来应该是这样的:

$rs = 'SELECT * FROM users WHERE user LIKE "(' . $_REQUEST['term'] . ')%"';

不确定您是否也需要括号,您可能想确保它是安全的,这样您就不会受到 sql 注入(inject)攻击

关于php - 自动完成 jQuery/PHP/MySQL 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996852/

相关文章:

php - 在 Laravel 4 中使用数据库结果填充下拉菜单

MySQL - 最近两个月的员工工资差异

java - 从 PHP 脚本调用 Swing Java 应用程序

php - 在 jQuery mobile 中启动 Javascript

javascript - 将表中同一单击行的所有单元格值加载到数组中,但第一个和最后一个 <td>

jquery - 多个选择会禁用彼此的选项

javascript - 隐藏 Bootstrap 3 Modal 和 AngularJS 重定向($location.path)

php - 为什么我的 symfony 路由不起作用?

php - MySQL 的 Phabricator 配置问题

php - Codeigniter 中的冲突 mysql 查询