2011-05-15 2 views
1

jQuery와 함께 검색 제안을 제공하는 PHP 스크립트가 있습니다. 그것은 MySQL 데이터베이스에서 결과를 가져옵니다. 그러나 사용자가 입력 한 문자에 대해 한 번에 5 개의 결과 만 표시하려고하지만 결과가 모두 나타나는 것으로 보입니다. 왜 이럴 수 있니?PHP 검색 제안

내 코드는 다음과 같습니다

<p id="searchresults"><?php 

$db=new mysqli('localhost','username','password','database'); 

if(isset($_POST['queryString'])){ 
$queryString=$db->real_escape_string($_POST['queryString']); 
      if(strlen($queryString)>0){ 
       $query = $db->query("SELECT * FROM search s WHERE name LIKE '%" . $queryString . "%'"); 
       if($query){ 
        while ($result = $query ->fetch_object()){ 
         echo '<a href="/search/'.$result->name.'/1/">';      
         $name=$result->name;    
         echo ''.$name.''; 
        } 
       } 
      } 
     } 
?></p> 

난 당신이 내가 설명하기 위해 노력하고 이해할 수 있기를 바랍니다.

+0

가'정말 SQL 주입 안전 real_escape_string'인가요? –

+2

@Uwe :'real_escape_string'은 SQL 주입 안전을 제공합니다. 그래, 네. (PDO가 더 좋긴하지만) –

답변

4

변경 "SELECT * FROM search s WHERE name LIKE '%" . $queryString . "%'"

당신이 (5 개) 결과를 제한하려면

"SELECT * FROM search s WHERE name LIKE '%" . $queryString . "%' LIMIT 5"합니다.

0

당신은 당신의 페이지 매김 코드를 추가해야합니다

샘플 코드가 있습니다

:

<?php 
// Connects to your Database 
mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error()); 
mysql_select_db("address") or die(mysql_error()); 
//This checks to see if there is a page number. If not, it will set it to page 1 
if (!(isset($pagenum))) 
{ 
$pagenum = 1; 
} 
//Here we count the number of results 
//Edit $data to be your query 
$data = mysql_query("SELECT * FROM topsites") or die(mysql_error()); 
$rows = mysql_num_rows($data); 
//This is the number of results displayed per page 
$page_rows = 4; 
//This tells us the page number of our last page 
$last = ceil($rows/$page_rows); 
//this makes sure the page number isn't below one, or more than our maximum pages 
if ($pagenum < 1) 
{ 
$pagenum = 1; 
} 
elseif ($pagenum > $last) 
{ 
$pagenum = $last; 
} 
//This sets the range to display in our query 
$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 
//This is your query again, the same one... the only difference is we add $max into it 
$data_p = mysql_query("SELECT * FROM topsites $max") or die(mysql_error()); 
//This is where you display your query results 
while($info = mysql_fetch_array($data_p)) 
{ 
Print $info['Name']; 
echo "<br>"; 
} 
echo "<p>"; 
// This shows the user what page they are on, and the total number of pages 
echo " --Page $pagenum of $last-- <p>"; 
// First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page. 
if ($pagenum == 1) 
{ 
} 
else 
{ 
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> "; 
echo " "; 
$previous = $pagenum-1; 
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> "; 
} 
//just a space 
echo " -- "; 
//This does the same as above, only checking if we are on the last page, and then generating the Next and Last links  
if ($pagenum == $last) 
{ 
} 
else { 
$next = $pagenum+1; 
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> "; 
echo " "; 
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> "; 
} 
?> 

출처 : www.twitter.com/ZishanAdThandar