自动完成显示所有条目,不进行任何搜索


autocomplete shows all entries, Does not do any searching

请帮帮我。。。我是个新手!请告诉我该怎么办。

processed.php

<?php
include_once('../../dbConnect.inc.php');
$sql="SELECT name FROM artist";
$artist = select($sql);
disconnect();
$output_items = array();
while($row = mysql_fetch_array($artist))
{
    $results[] = array('label' => $row['name']);
}
echo json_encode($results);
?>

index.php

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $("#artist").autocomplete(
    {
        source: 'processed.php',
        });
        });
</script>

我有这个问题:http://jsbin.com/alaci5

自动完成需要源(当指定URL来过滤结果时)。

来自文档:

字符串:当使用字符串时,自动完成插件希望字符串,指向将返回JSON数据的URL资源。它可以位于同一主机或不同主机上(必须提供JSONP)。这个自动完成插件不过滤结果,而是一个查询字符串添加了一个术语字段,服务器端脚本应该用于筛选结果。例如,如果源选项为设置为"http://example.com"然后用户键入foo,一个GET请求会被要求http://example.com?term=foo.数据本身可以是以与上述本地数据相同的格式。

因此,在您的PHP代码中,您必须执行以下操作:

include_once('../../dbConnect.inc.php');
$sql="SELECT name FROM artist WHERE `name` like '%".mysql_real_escape_string($_GET['term'])."%'";
$artist = select($sql);
$output_items = array();
while($row = mysql_fetch_array($artist)) {
    $results[] = array('label' => $row['name']);
}
echo json_encode($results);

该自动完成函数可能正在向processed.php页面传递一些变量。

使用var_dump($_GET)查看您正在传递的所有内容。

在其中一个$_GET元素中,您将看到页面上文本框的内容。为了便于演示,我将使用$_GET['text']。您需要找出哪个部分包含您需要的数据。

您需要做的是使用该值在数据库中搜索要返回的结果列表。

$sql="SELECT name FROM artist";
$artist = select($sql);

这是您现有的脚本。它最终看起来可能与此相似。

$text_input = mysql_escape_string($_GET['text']);
$sql="SELECT name FROM artists WHERE name LIKE '%$text_input%'";
$artist = select($sql);

您将希望在面向用户的页面上获得与输入文本相似的结果。

给你的几个注意事项

  1. 我使用mysql_escape_string()只是为了可能你已经拥有的东西。虽然这确实有效(驾驶一辆破旧的雪佛兰步行者也有效,但有更好的方法),但不建议这样做,这让我们获得了第2点。

  2. 使用旧的mysql扩展并不是一个好主意,它已经被mysqli和PDO所取代。

  3. 您需要对数据进行转义,mysqli就是这样做的。