3

所以我使用jQuery和PHP创建了一个自动完成框来从数据库中提取内容,它工作正常,除了当我在输入框中输入时它会拉回所有结果,而不是类似于我的结果米打字。

因此,如果您键入Test它会退回:

This
is
a
Test

而不是显示

Test

这是我的 HTML

<input type="text" id="group_name" name="group_name">

这是我正在使用的 jQuery

<script>
     $(document).ready(function() {
        $( "#group_name" ).autocomplete({
              source: "/wuzhapnn/php/data_stream/group_names",
              select: function(event, ui) { 
              $("#f").submit(); }
        });
    });
</script>

这是我的php页面

if ($_GET['run'] == 'group_names') {
    // pulls live data from database
    $db = db_open();
    $query = "SELECT group_name FROM groups";
    $result = db_query($db, $query);
    if (db_num_rows($result) > 1) {
        $result = db_fetch_all($result);
        foreach ($result as $key=>$value) {
            $group_names_array[] .= $value['group_name'];
        }   
    } else {

    }

    echo json_encode(array_values(array_unique($group_names_array)));  
}
  • 最近更新

新的 jQuery

<script>
    var availableName;

    $.getJson('/wuzhapnn/php/data_stream',function(response){
        availableName = response;
    });

     $(document).ready(function() {
        $( "#group_name" ).autocomplete({
            source: availableName,
              select: function(event, ui) { 
              $("#f").submit(); }
        });
    });
</script>

新的 PHP 页面

if ($_GET['run'] == 'group_names') {
    // pulls live data from database
    $db = db_open();
    $query = "SELECT group_name FROM groups WHERE group_name LIKE '%".$_GET['term']."%'";
    $result = db_query($db, $query);
    if (db_num_rows($result) > 1) {
        $result = db_fetch_all($result);
        foreach ($result as $key=>$value) {
            $group_names_array[] .= $value['group_name'];
        }   
    } else {

    }

    echo json_encode(array_values(array_unique($group_names_array)));  
}
4

3 回答 3

2

您需要添加LIKE子句。

"SELECT group_name FROM groups WHERE group_name LIKE '%".$_GET['term']."%'";

因为"SELECT group_name FROM groups"这将给出所有结果,database但您只需要那些与键入的单词匹配的结果,所以使用LIKE MySQL子句。

其他人评论回复。

如果您想在使用它之前创建 json 对象,您可以按如下方式进行,

var availableName;

$.getJson('/wuzhapnn/php/data_stream/group_names',function(response){
   availableName = response;
});

在此之后只需使用下面的代码进行自动完成。

$( "#group_name" ).autocomplete({
     source: availableName ,
于 2013-03-26T06:03:20.770 回答
1

您的 PHP 代码段实际上并未使用自动完成插件发送的值。如果您使用的是 JQuery 的插件,那么值 send 是一个名为terms的 GET 参数。

这需要包含在您的 PHP 中。

$term = $_GET['term'];

然后,您需要在查询中包含如下内容,但首先请先转义此值,然后再直接在 SQL 语句中使用它

SELECT group_name FROM groups WHERE group_name LIKE %<term>%
于 2013-03-26T06:12:36.837 回答
0

让它工作正常

新的 jQuery

<script>
    $(function() {       
        $( "#group_name" ).autocomplete({
          source: "/wuzhapnn/php/data_stream",
          minLength: 2,
        });
      });
</script>

新 PHP(感谢 Dipesh Parmar)

// pulls live data from database
$db = db_open();
$query = "SELECT group_name FROM groups WHERE group_name LIKE '%".$_GET['term']."%'";
$result = db_query($db, $query);

    $result = db_fetch_all($result);
    foreach ($result as $key=>$value) {
        $group_names_array[] .= $value['group_name'];
    }   


echo json_encode(array_values(array_unique($group_names_array)));  
于 2013-03-26T06:48:52.917 回答