2012-08-25 231 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