2012-07-29 89 views
0

我试图使用Jquery UI的自动完成功能来查询我的数据库的用户名。所以用户输入一个类似于我的db上的用户名,并且自动完成功能可以在下拉列表中猜出他们正在查找的内容。不幸的是,我无法让后端脚本返回建议。Jquery自动完成远程数据源

<?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; */ 

?> 

脚本简单地返回一个空数组,即使它应该返回一个结果。我不知道这里有什么问题..

回答

1

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

您需要发送的查询参数一样在以下几点:(我使用参数化查询在这种情况下,你应该用它来防止SQL注入攻击)

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

您还可以使用更危险方法如下:

参数化查询
$sql = "SELECT * FROM users WHERE username = ". $term; 

参考: How can I prevent SQL injection in PHP?

+0

嗯,但你有任何想法为什么脚本返回一个空的数组? – Thomas 2012-07-30 15:35:32

+0

它看起来像您的偏移值$ q被分配一个字符串 $ q = strtolower($ _ GET [“term”]); $ q是您的偏移量,应该是每个文档中从strpos开始搜索的数值:偏移量 如果指定,则搜索将从字符串的开头开始计算该字符数。 – 2012-07-31 14:43:28

相关问题