2016-04-14 84 views
0

所以我試圖從查詢被搜索時從數據庫顯示多個結果,查詢從另一頁上的搜索框傳遞。顯示來自sql查詢的多個結果

我有它顯示一個結果,但這就是它會顯示。 我需要它來顯示所有與搜索查詢相關的結果。

PHP代碼低於

<meta charset="UTF-8"> 
<?php 
    $mysqli = new mysqli('localhost', 'scott', 'tiger','courses'); 
    if ($mysqli->connect_errno) 
    { 
     die('Database connection failed'); 
    } 
    //$m->set_charset('utf8'); 
    $search_sql = " 
    SELECT title, summary, id 
    FROM course 
    WHERE title LIKE '%".$_POST['searchBar']."%'"; 
    $result = $mysqli->query($search_sql) or die($mysqli->error); 
    $search_result = $result->fetch_assoc(); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
</body> 

和搜索欄

<!doctype html> 
<html> 
<Head> 
    <meta charset = "utf-8"> 
    <title>Search</title> 
</head> 
<body> 
    <h2>Search</h2> 
    <form name="search" method="post" action="SearchResultsPage.php"> 
     <input name="searchBar" type="text" size="40" maxlength="60" /> 
     <input type="submit" name="Submitsearch" value="Search" /> 
    </form> 
    </body> 

有沒有人有任何建議的代碼?

在此先感謝;

+0

您只需要顯示一條記錄或完美的搜索值結果? – RJParikh

+0

你必須遍歷結果集。請參閱[關於fetch_assoc()]的PHP手冊頁上的示例#1(http://php.net/manual/en/mysqli-result.fetch-assoc.php)。另外,請閱讀「準備好的陳述」。 –

+0

只需閱讀[documentation]上的示例(http://php.net/manual/en/mysqli-result.fetch-assoc.php)。 –

回答

1

你需要把它放在一個while循環中以顯示多個結果,你使用的fetch函數只會檢索一行,如果你把它放在一個循環中,你可以繼續讀取,直到沒有東西可以讀取:

//$m->set_charset('utf8'); 
$search_sql = " 
SELECT title, summary, id 
FROM course 
WHERE title LIKE '%".$_POST['searchBar']."%'"; 
$result = $mysqli->query($search_sql) or die($mysqli->error); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <?PHP while($search_result = $result->fetch_assoc()) { ?> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
    <?PHP } ?> 
</body> 

PS你的代碼容易受到SQL注入的攻擊,你應該閱讀一下準備好的語句More Info on that

+0

這正是我所期待的,我也會看看準備好的陳述,謝謝! – bdg

+0

沒問題,樂於幫忙。如果您對此有任何疑問,請不要猶豫,如果不是,請不要忘記接受答案,以免它保持開放狀態:)準備好的陳述起初似乎令人望而生畏,但並沒有那麼糟糕,從SQL注入中獲得安全保障^^您的項目祝您好運! – Jester

+0

沒問題我會如果我遇到任何我不確定的事情,再次感謝 – bdg

0

你可以用while循環迭代你的查詢結果。爲了完成這個例子,我添加了必要的數據清理。

<?php 

// function to clean post data 
function cleanPost(&$value) { 

    if (is_array($value)) { 
     foreach ($value as $k => $v) { 
      $value[$k] = cleanPost($v);    
     } 
     return $value; 
    } 
    else { 
     $value = mysql_real_escape_string($value); 
     return trim(htmlentities(strip_tags($value))); 
    } 
} 

// search function 
function search() { 

    // check if post data is set 
    if (isset($_POST['searchBar'])) { 

     // make link with db 
     $link = mysqli_connect('localhost', 'scott', 'tiger','courses'); 
     if (!$link)   
      return false; 
     } 

     // clean your post data 
     $cleanPostData = cleanPost($_POST); 

     // query 
     $sql = "SELECT title, summary, id FROM course WHERE title LIKE '%".$cleanPostData['searchBar']."%'"; 
     $result = mysqli_query($link, $sql); 

     // iterate over results 
     if (isset($result) && mysql_num_rows($result) > 0) { 
      while ($row = mysql_fetch_assoc($result)) { 
       // here is your data 
       echo $row['title'] . "< br/>"; 
       echo $row['summary'] . "< br/>"; 
       echo $row['id'] . "< br/>"; 
      } 
     }  
    } 
} 

// call search function 
search(); 

?> 
+0

如果我可能問,你是否倒下了我?如果是這樣,請注意解釋一下?如果不是從來沒有想過 – Jester

+0

也混合mysql和mysqli函數,那會產生問題。 – Jester