自动完成 jQuery / PHP / MySQL 不返回结果
Posted
技术标签:
【中文标题】自动完成 jQuery / PHP / MySQL 不返回结果【英文标题】:Autocomplete jQuery / PHP / MySQL not returning results 【发布时间】:2014-07-22 16:59:13 【问题描述】:我是第一次使用 jQuery 自动完成功能。我创建了一个简单的数据库,其中包含几个用户名和一个简单的搜索框来练习我刚刚读到的自动完成功能。我已经验证了我的 mysql 查询在 mysql 中工作。我还验证了我已连接到数据库。我仍然无法让它自动建议条款。我认为(尽管不是 100% 肯定)我已经将我的问题与我使用 $_REQUEST['term'] 命令的方式隔离开来。所以有两个问题:我是否正确使用了这个命令,我的自动完成方式有什么问题吗?注意:我知道我没有清理输入。我只是在练习自动完成的东西
附加信息“如果我取出 $_request 并只查询所有用户,它将返回一个包含所有数据库用户的自动完成。无论我输入什么键都会发生这种情况。这会让我相信它正在接收ajax 请求。
这是我的控制台显示的内容
这是我的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();
【问题讨论】:
如果您打开浏览器控制台,您能否验证 AJAX 请求正在发送到服务器?您的控制台中是否还有其他错误? 为什么要在“ ”中添加一个? 中的表单标签没有结束? @mituw16 我打开控制台,我有 0 个错误。我不确定如何检查请求是否正在发送,但我会继续阅读。如果我取出请求项并只查询所有用户,它会在我输入任何字母时立即返回所有用户。这会让我相信它正在发送 ajax 【参考方案1】:我建议这行有语法错误:
$rs = 'SELECT * FROM users WHERE user LIKE "($_REQUEST['term']) .'%'"';
看起来应该是这样的:
$rs = 'SELECT * FROM users WHERE user LIKE "(' . $_REQUEST['term'] . ')%"';
不确定你是否也需要括号,你可能想确保它是安全的,这样你就不能得到和 sql 注入攻击
【讨论】:
这种新语法有效(不带括号)。谢谢【参考方案2】:如果您使用的是谷歌浏览器,请按 F12 打开控制台。在控制台窗口中,单击网络选项卡并按 F5 重新加载您的页面。 现在尝试在您的自动完成字段中输入一些内容并在控制台中查找Suggest_username.php。确保响应状态码不是 404。
【讨论】:
这不是答案,真的应该评论 谢谢,我确实检查过了。它似乎正在发送ajax。我发布了一张我的控制台显示的图片。以上是关于自动完成 jQuery / PHP / MySQL 不返回结果的主要内容,如果未能解决你的问题,请参考以下文章
如何从 php mysql 查询中为 jQuery 自动完成准备多维数组?
jQuery UI 自动完成,使用 PHP/MySQL 搜索 2 个表