0

私は PHP/MySQL の初心者ですが、ショップの在庫を処理するためにある種のインターフェースを作成することにしました。私はたくさんのことを学びましたが、今は立ち往生して絶望しています。

このフォームには、特定の種類の在庫と数量のグループが表示されます。

<form method="post" action="submit.php">
<?php
while ($row = mysql_fetch_assoc($rs)) { 
echo"<input type=\"hidden\" name=\"ovid[]\" value=" . $row['option_value_id'] . " />";
echo $row['name'];
echo"<input type=\"text\" name=\"quant[]\" value=" . $row['quantity'] . " />";
echo"<input type=\"submit\" /><br />";
} ?>
</form>

そして、これはsubmit.phpです:

$_POST['ovida'] = implode(",",$_POST['ovid']);
$_POST['quanta'] = implode(",",$_POST['quant']);

print $_POST["ovida"];
print $_POST["quanta"];

$ovidyay = $_POST["ovida"];
$quantyay = $_POST["quanta"];

$query = "UPDATE product_option_value SET quantity ='$quantyay' WHERE option_value_id = '$ovidyay'";
$rs = mysql_query( $query )
or die( mysql_error() );

送信を押してもエラーは発生しませんが (多くあります)、更新できるのはリストの最初のエントリだけです。どんな助けもありがたく受け入れます。

4

2 に答える 2

1

各項目を個別に繰り返して更新できます。

for ($i = 0; $i < COUNT($_POST['ovid']); $i++)
{
    $ovidyay = $_POST['ovid'][$i];
    $quantyay = $_POST["quanta"][$i];

    $query = "UPDATE product_option_value SET quantity ='$quantyay' WHERE option_value_id = '$ovidyay'";
    $rs = mysql_query($query);
}

さらに、コードは SQL インジェクション攻撃に対して脆弱であり、非推奨の MySQL php 関数を使用しています。コードを改善し、脆弱性を減らしたい場合は、次のリンクをご覧ください。

PHP で mysql_* 関数を使用してはいけないのはなぜですか?

mysql_ 関数の代わりに何を使用できますか?

準備済みステートメント

MySQLi を使用したプリペアド ステートメント

于 2013-02-13T22:12:22.957 に答える
0

まず、mysql_*関数を使用しないでください。PDO または MySQLi のいずれかを使用して、準備されたステートメントを読んでみてください。

それでもmysql_を使用したい場合関数は、少なくともmysql_real_escape_stringを使用してそれらをエスケープしますが、廃止されているため、 mysql_関数の使用はお勧めしません。

できることは次のとおりです。

  1. 各投稿データをループして、1 つずつ更新するか、
  2. 長いクエリを作成して一度実行します。
于 2013-02-13T22:13:48.007 に答える