2016-11-28 65 views
0

我想實現一個非常簡單的搜索到我的主頁,但它不完全工作,我希望它..按鈕單擊窗體上的mysqli PHP數據庫搜索

它看起來像從鏈接表單工作得很好,甚至數據庫搜索現在都在工作,這要歸功於最新的更新。

的問題是:當搜索已經準備好,並顯示結果(回聲$輸出),我總是看到只有一個結果,但我要顯示所有比賽..

任何建議?

感謝提前:)

這裏談到的的search.php文件:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
?> 



<?php 

    $conn = mysqli_connect("localhost", "user", "password", "table"); 

    if(mysqli_connect_errno()) { 
     echo "Failed to connect: " . mysqli_connect_error(); 
    } 
?> 


<?php 

    $output = ''; 

    if(isset($_GET['query']) && $_GET['query'] !== ' ') { 

     $searchquery = $_GET['query']; 

     $query = mysqli_query($conn, "SELECT * FROM tbl_users WHERE username LIKE '%$searchquery%' OR email LIKE '%searchquery%'") or die(mysqli_error()); 

     $num_rows = mysqli_num_rows($query); 


     if($num_rows== 0) { 

       $output = 'No search results for <b>"' . $searchquery . '"</b>'; 

     } else { 

      while($row = mysqli_fetch_array($query)){ 

       $id = $row['id']; 
       $username = $row['username']; 
       $email = $row['email']; 

       $output = "<a href='profile.php?user=$id'>$username</a>"; 

      } 

     } 

    } else { 

     header("location: ./"); 

    } 


    print("$output"); 

    mysqli_close($conn); 


?> 

回答

0

%$query%需要被包裹在你的查詢字符串中單引號,像這樣:

SELECT * FROM tbl_users WHERE username LIKE '%$query%' OR email LIKE '%$query%'

但是現在你的代碼很容易被SQL注入。你應該看看下一步的解決方案。請參閱:How can I prevent SQL injection in PHP?

+0

感謝,它現在工作稍好一點,我改變了代碼(請參閱編輯),但因此我有一個新的錯誤消息:警告:mysqli_fetch_array()期望參數1是mysqli_result。 這並不壞,因爲這意味着實際的搜索工作。 感謝您的注射提示,但首先我需要得到這個勉強工作;) – Maxischl

+0

看起來你只需要改變'while($ row = mysqli_fetch_array($ searchquery)){'使用'$ query'代替'$ searchquery'。 –

+0

感謝人,一分鐘前從字面上發現了這個問題,只是用了一個錯誤的變量 - 傻傻的。謝謝你通過檢查! 無論如何,現在我有另一個新問題-.-我想要顯示所有匹配。但結果總是隻顯示highes指數的結果...... – Maxischl