0

こんにちは、私の課題のこのタスクで大きな問題が発生しています

私は xampp に search_test という名前のデータベースをセットアップしました。このデータベースには、名前と姓がフィールドとして含まれています。私は php フォームを設定したので、ユーザーが Andre という名前を入力すると、データベース内のすべての andres が返されます。データベースにデータがあることを知っていても、検索結果がないという問題があります。これは、index.php と呼ばれる 1 つの php ページであるはずのコードです。

    <?php
    mysql_connect("localhost","michael","xcA123sd") or die(mysql_error());
    mysql_select_db("search_test") or die ("could not find db"); 
     $output ='';
    if (isset ($_POST['search']));
        $searchq = $_POST['search'];
    $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search");
    $count = mysql_num_rows($query);
    if($count == 0){
        $output = 'There was no search results !';
        }else{
        while($row = mysql_fetch_array($query)){
        $fname = $row['firstname'];
        $output .='<div> '.$fname.'</div>';
        }

        }
}


?>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>search</title>
</head>
<body>
<form action="index.php" method="post">
<input type="text" name="search" placeholder="search for members"/> 
<input type="submit" value=">>"/>
</form>
<?php print("$output);?>
</body
</html> 

たとえば、andre と入力すると、応答が返されます

検索結果はありませんでした。

誰か助けてくれませんか

4

5 に答える 5

2

まず第一に:あなたが欲しい

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search");

することが

$query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%$searchq%'" ) or die("could not search");

(追加に注意して$ください)。

そうは言っても、SQL インジェクションに大きな問題があります。たとえば、クエリを「通常どおり」 1 回実行するとします。今' UNION ALL SELECT correct_field_num FROM information_schema.TABLES WHERE NAME LIKE '%、私は検索として投稿します-これにより、テーブル構造が得られます。投稿する' UNION ALL SELECT correct_column_num FROM any_table_name WHERE 'x' LIKE '%と、任意のテーブルを読み取ることができます。

十分に理解されている手法の 1 つを使用して、ユーザー入力から安全なクエリを作成してください非推奨のmysql_real_escape_string()クエリからパラメーター化されたクエリまで、さまざまな範囲があります。

于 2013-03-31T16:22:22.170 に答える
1
LIKE '%searchq%'"

変数にする必要がある場合は、「searchq」のような文字列を検索し、それぞれのドル記号を追加します

于 2013-03-31T16:13:42.790 に答える