2012-08-25 90 views
0

我有一個搜索框,用戶可以通過幾種方式,名字,姓氏,用戶名或電子郵件在下拉列表中搜索其他用戶。這個下拉菜單顯示了前8個結果,然後我在底部顯示了一個鏈接,指出可以找到更多結果以及它們可能輸入到搜索中的文本。搜索結果(顯示更多結果)

因此,例如,如果我輸入JOHN,但只輸入他的名字'JO',這就是$ _GET ['t']應該發送到searchresults頁面的值。所以我得到了儘可能多的鏈接。但我只是不知道查詢應該是什麼

顯示更多結果鏈接

<a href='include/searchresults.php?ref=".$_GET['t']."'>Show More Results for ".$_GET['t']."</a> 

SEARCHRUSULTS.PHP

if(isset($_GET['t'])){ 
$_GET['t'] = str_replace(" ", "", $_GET['t']); 
$_GET['t'] = str_replace("%", "", $_GET['t']); 

$_GET['t'] = mysqli_real_escape_string($mysqli,$_GET['t']); 

if(strlen($_GET['t'])>1){ 

$sql="SELECT * FROM users WHERE username LIKE '%".$_GET['t']."%' OR first LIKE '%".$_GET['t']."%' OR last LIKE '%".$_GET['t']."%' OR email LIKE '%".$_GET['t']."%' ORDER BY first ASC"; 
$query=mysqli_query($mysqli,$sql); 
$count = mysqli_num_rows($query); 

    if($count<=0){ 
     echo "No results found"; 
    }else{ 
    echo "<table width='100%'>"; 
     while($user_data=mysqli_fetch_array($query)){} 
+0

你怎麼弄8只的結果,你應該得到的所有結果,你沒有設置你的查詢的任何限制。 –

+0

你正在使用'mysqli',但你沒有使用佔位符。這是一個壞主意。在你的查詢中看到像'$ _GET ['t']'這樣的東西應該讓你失望。即使使用了轉義函數,也不應該這樣做。你錯過了其中的一個,會有嚴重的後果。 – tadman

+0

上面的代碼看起來不錯,那麼你怎麼能得到更多的結果 –

回答

1

嘗試這樣的事情,使用MATCH insted的LIKE的快得多。

$keyword=mysql_real_escape_string($_GET['t']); 
$rowsperpage=8; 
$sql="SELECT * FROM users WHERE MATCH (first, last, email) AGAINST ('+$keyword*' IN BOOLEAN MODE) ORDER by first LIMIT $rowsperpage"; 
$query=mysqli_query($mysqli,$sql); 
$count = mysqli_num_rows($query); 

並設置爲$rowsperpage只要你喜歡。

更多結果頁面做這樣的事情

$rowsperpage=mysql_real_escape_string($_GET['rpp']); 
<a href='include/searchresults.php?t=$keyword&rpp=$rowsperpage'>Show More Results for "$keyword"</a> 
+0

我只是得到一個空白頁面。這看起來接近我需要的東西。這與我的鏈接有關嗎? – dave

+0

請參閱我的回答中的更新 –

+0

鏈接無法找到這些變量,因爲鏈接位於頁面上並且下拉。併發送$ _GET ['t']變量到searchresults.php – dave