これは、単純化とテスト目的で PHP とデータベースを使用して構築された小さなセグメントです。テキストの例を次に示します。
アイデアは、フォームが送信され、PHP が結果を処理するというものです。ただし、セキュリティのために各投稿に mysql_real_escape_string を使用しようとしています (もっと良い方法があるのではないでしょうか?)
とにかく、ここで問題です。foreach ループを保持すると、qty[] と optname[] の 2 つの post 配列変数が両方とも NULL として返されます (テスト目的で var_export($_POST) を介して出力されます)。これは、WITH foreach mysql_real_escape_string ループを出力するものです。
array (
'update' => 'Yes',
'qty' => NULL,
'optname' => NULL,
)
foreach ループを削除すると、すべて正常に動作します。これが得られ、php が結果を処理するために必要なものです。
array (
'update' => 'Yes',
'qty' =>
array (
1 => '2',
2 => '2',
3 => '2',
4 => '2',
),
'optname' =>
array (
1 => '1|4',
2 => '1|4',
3 => '1|4',
4 => '1|4',
),
)
ただし、SQLクエリが発生する前にデータがチェック/クリーニングされていません。ループを使用して各投稿変数をチェックし、POST 変数をそのままにしておくにはどうすればよいですか??
これは、任意のローカル ホストに貼り付けてテストできるコードです。
<?php
foreach ($_POST as $key=>$value) { $_POST[$key] = mysql_real_escape_string($value); }
echo '<pre>';
var_export($_POST);
echo '</pre>';
?>
<form name="updateQty" id="updateQty" method="post" />
<input type="hidden" name="update" id="update" value="Yes" />
<input type="text" name="qty[1]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[1]" id="optname[]" value="1|4" />
<input type="text" name="qty[2]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[2]" id="optname[]" value="1|4" />
<input type="text" name="qty[3]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[3]" id="optname[]" value="1|4" />
<input type="text" name="qty[4]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[4]" id="optname[]" value="1|4" />
<input type="submit">
</form>
ありがとう!