【问题标题】:autocomplete shows all entries, Does not do any searching自动完成显示所有条目,不进行任何搜索
【发布时间】:2013-08-15 11:47:02
【问题描述】:

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

已处理的.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

【问题讨论】:

  • 你可以在这里看到一些远程加载的例子,jqueryui.com/autocomplete/#remote
  • @Hisamu 我搜索了互联网,但找不到任何有用的东西!比如推荐你的网站,没有php文件
  • 因为您的 sql 语句正在寻找所有内容。你应该在你的 sql 语句中有这样的东西LIKE '%".mysql_real_escape_string($_GET['search-term'])."%'"

标签: php jquery mysql json jquery-ui


【解决方案1】:

该自动完成功能可能会将一些变量传递给您的 processes.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 扩展并不是一个好主意,它已被 mysqliPDO 取代。

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

【讨论】:

  • 感谢您的回答。我很困惑!
【解决方案2】:

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

来自文档:

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

【讨论】:

  • 不知道怎么感谢你!我花了一整天的时间。
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2014-06-01
  • 2012-01-14
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多