2017-02-22 215 views
0

我想創建一個簡單的搜索欄,允許用戶搜索使用用戶ID來返回特定用戶。創建數據庫搜索欄查詢

我需要包含SQL注入保護。

當前頁面加載空白屏幕,但是當我刷新頁面時,我得到「未找到結果」響應。

任何幫助表示讚賞。我一直在閱讀很多關於搜索欄的帖子,但沒有任何幫助。

這裏是代碼:

<html> 
<head> 
<title></title> 
</head> 
<body> 
<form action="search.php" method="POST"> 
    <input type="text" name="search" /> 
    <input type="submit" value="Search" /> 
</form> 
</body> 



<?php 
//search.php 
    include("DbConnect.php"); 

    $search = $_POST['search']; 

    $safesearch = mysqli_real_escape_string($search); 

    $Query = "SELECT user_id 
      FROM users 
      WHERE user_id = '$safesearch'"; 

    $Result = mysqli_query($DB,$Query);  

    $NumResults = mysqli_num_rows($Result); 

    if ($NumResults==1) 
    {  
     echo "<h1>results: ".$Result."</h1>"; 
    }else{ 
     echo "<h1>No Results found</h1>"; 
    } 
?> 
+1

您的混合mysql和mysqli的 – nogad

+0

參數化查詢。 – chris85

+0

sortewd sql-sqli問題,並沒有解決這個問題。 –

回答

0

你應該有一個if(isset($ _ POST [「提交」] {}包圍你的代碼,所以只有當他們搜索的火災,而不是當頁面加載。

如果你做任何形式的插入,選擇或使用SQL語句更新,將有在其中的變量,你應該使用準備好的語句。

使用事先準備好的聲明這是一個很多比你更安全」重新做:

<?php 
//search.php 
    include("DbConnect.php"); 

    $search = $_POST['search']; 

    $safesearch = mysql_real_escape_string($search); 

    $Query = "SELECT user_id 
      FROM users 
      WHERE user_id = ?"; 

    $stmt = $connectionVariableName->prepare($query); 
    $stmt->bind_param("s",$safesearch); 
    $stmt->execute(); 
    $stmt->bind_result($result); 
    $stmt->fetch(); 
    $num_rows = $stmt->num_rows; 
    $stmt->close(); 

    if ($num_rows > 0) 
    {  
     echo "<h1>results: ".$result."</h1>"; 
    }else{ 
     echo "<h1>No Results found</h1>"; 
    } 
?> 

http://php.net/manual/en/mysqli.prepare.php

你也應該用正則表達式測試它消毒搜索變量,以確保它僅包含你允許的用戶ID的字符,而不是/ * ^等

+0

謝謝 - 我已經閱讀過這篇文章,對於我目前的水平來說,這看起來非常複雜。我會盡力理解這一點,並儘可能使用它。 –

+0

轉到我發送的php.net網站,它會告訴你你需要做什麼。如果你想要安全,你需要最終學習準備好的語句。我對你有信心:)但要停止刷新錯誤,請將你的php代碼放在isset中,就像我之前說過的那樣。這就是說,如果點擊提交(搜索),只運行這個代碼。 – clearshot66

0

你想要的部分短語搜索,我猜。

然後你的查詢必須是這樣的:

$Query = "SELECT user_id 
      FROM users 
      WHERE user_id LIKE '%$safesearch%'"; 

不是很熟悉PHP,但象徵%似乎不是在語言(糾正我,如果我錯了)的特殊字符,如果偶然的是 - 逃避它。

爲了使它不區分大小寫 -

$safesearch = strtolower($safesearch); 

$Query = "SELECT user_id 
       FROM users 
       WHERE lowercase(user_id) LIKE '%$safesearch%'";