繁体   English   中英

jQuery自动完成远程数据源

[英]Jquery Autocomplete remote datasource

我试图使用Jquery UI的自动完成功能来查询数据库中的用户名。 因此,用户在我的数据库上输入了与用户名相似的用户名,并且假定自动完成功能可以在下拉菜单中猜测他们要查找的内容。 不幸的是,我无法获得后端脚本来返回建议。

<?php

sleep( 3 );
// no term passed - just exit early with no response
if (empty($_GET['term'])) exit ;
$q = strtolower($_GET["term"]);
// remove slashes if they were magically added
if (get_magic_quotes_gpc()) $q = stripslashes($q);

$sql = "SELECT * FROM users";   
$r = mysql_query($sql);
$items = array();
if ( $r !== false && mysql_num_rows($r) > 0 ) { 
    while ( $a = mysql_fetch_assoc($r) ) {  
        $username = $a['username'];
        array_push($items, $username);              
        }
}

$result = array();
foreach ($items as $key=>$value) {
    if (strpos(strtolower($key), $q) !== false) {
        array_push($result, array("id"=>$k, "label"=>$key, "value" => strip_tags($key)));
    }
    if (count($result) > 11)
        break;
}

// json_encode is available in PHP 5.2 and above, or you can install a PECL module in earlier versions
echo json_encode($result);
/* echo $items; */

?>

该脚本仅返回一个空数组,即使它应返回结果也是如此。 我不知道这是怎么回事。

首先让我说,查询数据库并返回整个表以筛选结果是一种糟糕的方法。 如果SQL查询正在从数据库中筛选数据,则执行速度会更快。 无论如何,您都必须调用数据,为什么不过滤数据并仅返回相关结果?

您需要向查询发送一个Like参数,如下所示:

$sql = "SELECT * FROM users where username like :term";

(在这种情况下,我使用的是参数化查询,应该使用它来防止SQL Injection攻击。)

您还可以使用以下更不稳定的方法:

$sql = "SELECT * FROM users WHERE username = ". $term;

参数化查询参考: 如何防止PHP中的SQL注入?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM