-1

入力ボックスからデータを取得し、それをデータベースに渡して適切なレコードと結果を表示しようとしていますが、結果を取得できないために支援が必要です

<html>
<body>
</body>
</html>

<?php>
$prod_name = $_POST["name_of_the_product"];
echo [$prod_name];
$db_host = "localhost";
$db_username = "acwj_price";
$db_pass = "";
$db_name = "acwj_price";

mysql_connect("$db_host","$db_username","$db_pass") or die ("Please Try Again");
mysql_select_db("wikiacwj_price") or die ("no data");

$sql = mysql_query("SELECT * FROM price_comparsion where product_name="prod_name"");

//write the results

while ($row = mysql_fetch_array($sql)) {
echo $row['product_name'];}

?>
</body>
</html>
4

2 に答える 2

6

警告:カーゴカルトプログラミングが検出されました!。構文エラーがたくさんあり、SQLインジェクションの穴があり、役に立たないエラー処理があります。何とか何とか何とか。言い換えれば、コードは混乱しています。

1)ここecho [$prod_name];の目的は何ですか?[]これは完全な構文エラーです

2)mysql_connect( "$ db_host"など""...-なぜ変数の周りですか?新しい空の文字列を作成し、その中に別の文字列を埋め込みます-CPUサイクルの無駄です。

3)or die ("Please Try Again"); -サイトのユーザーに再試行するように指示するのはどのような用途ですか?コードがmysqlにログインできない場合、ユーザーはこれをどのように修正する必要がありますか?リロード時にハンマーを使用しても、無効なmysqlログインが魔法のように再び機能し始めることはありません。あなたがコードの唯一のユーザーである場合は、少なくとも、スクリプトが停止している理由を説明する有用なエラーメッセージ出力がありますor die(mysql_error())

4)... where product_name="prod_name"")。ここに別の恐ろしい構文エラーがあります。埋め込みようとしているのと同じタイプの引用符で作成された文字列内に引用符を埋め込むことはできません。

4a)おそらく、渡されたフォーム値を実際に埋め込んでいるはず... product_name='$prod_name'"ですか?

4b)がSQLインジェクションソースになりました。m_r_e_s()はアクティブなDB接続がある場合にのみ機能するため、$prod_nameAT MINIMUIMを用意し、DBに接続した後のどこかに置く必要があります。$prod_name = mysql_real_escape_string($_POST['name_of_product'])

于 2012-04-21T22:40:44.277 に答える
2

確かな答えを得るには、より多くのコンテキストが必要ですが、コードを確認すると、問題を引き起こしている次のことがわかりました。

echo [$prod_name];は正しくありません - あるべきですecho $prod_name;

また、mysql_connect が正しくありません - 次のようにする必要があります mysql_connect($db_host,$db_username,$db_pass) or die ("Please Try Again");
(変数を引用符で囲む必要はありません)。

そして、SQLステートメントが正しくありません-次のようにする必要があります:(
$sql = mysql_query("SELECT * FROM price_comparsion where product_name='" . mysql_real_escape_string($prod_name) . "'");
引用符を修正し、変数を渡すように変更し、mysql_real_escape_string最小限のSQLエラー防止として追加しました)

注: これは SQL のベスト プラクティスを反映したものではありません。元のコードにはあらゆる種類の SQL インジェクション攻撃の脆弱性があります。このコードは機能するように改訂されているだけです。このようなコードを作成する場合は、SQL インジェクションの防止について読む必要があります。StackOverflow に関する有益な情報はたくさんあります。ここでは 1 つの例を示します: SQL インジェクション、Quotes、および PHP

于 2012-04-21T22:48:11.957 に答える