上下文
问题
我的问题是,无论用户输入什么内容,都会显示数据库中的前十个列表(基于id)。只有在用户输入另一个字母后才能正确显示建议。
问题
如何修改jquery或php代码以确保返回仅以输入内容开头的术语(然后根据id返回该子集中的前十个术语。)?
HTML
<script type="text/javascript" src="/scripts/autocomplete/autocomplete/jquery.js"></script>
<script type="text/javascript" src="/scripts/autocomplete/autocomplete/jquery.autocomplete.js"></script>
<script>
$(document).ready(function(){
$("#tag").autocomplete("/scripts/autocomplete/autocomplete/autocomplete.php", {
selectFirst: false,
minChars: 2
});
});
</script>
PHP
<?php
$q=$_GET['q'];
$mydata=mysql_real_escape_string($q);
$mysqli=mysqli_connect('localhost','username','password','languages') or die("Database Error");
$sql="SELECT searchterms FROM topterms WHERE searchterms LIKE '$mydata%' ORDER by id";
$result = mysqli_query($mysqli,$sql) or die(mysqli_error());
if($result)
{
while($row=mysqli_fetch_array($result))
{
echo $row['searchterms']."\n";
}
}
?>
答案 0 :(得分:0)
当您使用URL作为源时,使用新版本的jQuery自动完成功能:
您必须返回JSON数据:
String:使用字符串时,Autocomplete插件需要这样做 string指向将返回JSON数据的URL资源。它可以 在同一主机上或在另一主机上(必须提供JSONP)。
您收到的GET参数是'term',而不是'q'
自动完成插件不会过滤结果,而是过滤查询 string添加了一个术语字段,服务器端脚本应该这样 用于过滤结果。
在PHP中使用mySQL进行真正转义的正确方法是在建立连接后使用它,在你的情况下:
$q = $_GET['term'];
$mysqli = mysqli_connect('localhost','username','password','languages');
if (!$mysqli or $mysqli->connect_error) die("Database Error");
$mydata = $mysqli->real_escape_string($q);
$sql = "SELECT searchterms FROM topterms WHERE searchterms LIKE '$mydata%' ORDER by id";
$result = mysqli_query($mysqli,$sql);
$json = array();
if ($result and $result->num_rows > 0) {
while($row=mysqli_fetch_array($result)) {
$json[] = $row['searchterms'];
}
}
header('Content-Type: application/json'); // You can skip that because IE doesn't really like it
echo json_encode($json);