-2

以前に尋ねた質問に続いて (非常に役立つ回答でした - ありがとうございます)、追加の質問があります。

フィルタリングされた結果を持つ別のページに正常にリンクされたフォームを自分のページに入れることができました。次に、すぐ下に別のフォームを (2 番目の検索フィルターとして) 追加しましたが、2 番目のフォームが機能しません。コードは次のとおりです。

<p style="margin-left:20px;">Search by:<br />
<form action="ordersfiltered.php" method="post">
order_no: <input type="int" name="order_no" />
<input type="Submit" />
</form>
<form action="ordersfiltered_name.php" method="post">
name: <input type="text" name="name" />
<input type="Submit" />
</form></p>

私が言うように、最初のボックスに order_no を入力して [送信] をクリックすると、それに応じて結果がフィルタリングされた別のページが表示されます。しかし、2 番目のボックスに名前を入力すると、表示されるページにはすべての表の見出しなどがありますが、結果はありません。参考までに、「ordersfiltered.php」ページにある関連コードは次のとおりです。

$result = mysql_query("SELECT * FROM orders WHERE order_no = " . $_POST["order_no"]);

(注: SELECT * を使用してはならないことに気付きました。これは変更するリストに含まれています)。これはうまくいきます。

「ordersfiltered_name.php」にあるコードは次のとおりです。

$result = mysql_query("SELECT * FROM orders WHERE name = " . $_POST["name"]);

最初のものは機能するが、2番目のものは機能しない理由はありますか?

また、可能であれば、ユーザーがすべてを入力しない場合に備えて、WHERE name LIKE '%...%' のようなものを追加して修正したいと思います。

再度、感謝します。

4

2 に答える 2

0

order_noが数値であり、文字列であるという事実に関連していると思いnameます。文字列は引用符で囲む必要があります。

したがって、次のように変更します。

$result = mysql_query("SELECT * FROM orders WHERE name = " . $_POST["name"]);

に:

$name =  mysql_real_escape_string($_POST['name']);
$result = mysql_query("SELECT * FROM orders WHERE name = '". $name ."'");

$_POST['name']また、引用符がないことを確認する必要があります。

EDIT 1.コマンドor die(mysql_error())の後にいつでも使用できmysqlます。次に、これらのコマンドが機能しない理由を確認できます。

$_POST[..]EDIT 2.クエリで使用するのは非常に危険です。最初にその値を確認し、必ず「クリーンアップ」する必要があります。

EDIT 3.別のメモ、に移動することを検討してPDOください。

于 2012-08-24T17:00:39.310 に答える
0

あなたは、以前に尋ねられた質問にはいくつかの役立つ回答があったと言いましたが、あなたはそれを使用していないようです: MySQL クエリでの PHP フォームの使用(そこからすべての有効なポイントを繰り返すつもりはありません...)。

つまり、投稿された変数の引用符とエスケープがありません。

$result = mysql_query("SELECT * FROM orders WHERE name = '" . mysql_real_escape_string($_POST["name"])) . "'";
于 2012-08-24T17:04:12.593 に答える