2012-07-29 94 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

相關問題