2017-02-22 11 views
0

ユーザーが特定のユーザーを返すためにユーザーIDを使用して検索できる単純な検索バーを作成しようとしています。データベースのseach barクエリを作成する

私は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

sql-sqliの問題が解決されていないため、この問題は解決されていません。 –

答えて

0

ページがロードされると、彼らは検索しない場合にのみ発動ので、あなたはあなたのコードの周りにいる場合(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内に入れてください。つまり、submit(検索)をクリックした場合にのみこのコードを実行します。 – 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%'"; 
関連する問題