autocomplete显示所有条目,不进行任何搜索

时间:2013-08-13 18:12:55

标签: php jquery mysql json jquery-ui

请帮帮我... 我是新手!请告诉我该怎么做。

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

2 个答案:

答案 0 :(得分:2)

自动完成功能可能会将一些变量传递给您的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()可能已经拥有的东西。虽然这确实有效(绕着破坏的屁股chevy起搏器也可以起作用,但是有更好的方法),不推荐它,这使我们为第2点做好准备。

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

  3. 您需要转义数据this is how its done with mysqli

答案 1 :(得分:2)

自动填充需要源(当指定URL过滤掉结果时)。

来自文档:

  

String:使用字符串时,Autocomplete插件需要这样做   string指向将返回JSON数据的URL资源。它可以   在同一主机上或在另一主机上(必须提供JSONP)。该   自动填充插件不会过滤结果,而是过滤查询   string添加了一个术语字段,服务器端脚本应该这样   用于过滤结果。例如,如果源选项是   设置为“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);