2016-07-17 5 views
0

を作成していない私は、このコードを持ついくつかの奇妙な問題を抱えて:のforeach更新SQLループは、ループに

<?php 
    $sql = "SELECT * FROM sessions WHERE SES = '$SES' ORDER BY ID DESC"; 
    $preorders = mysql_query($sql); 
    while ($pre = mysql_fetch_array($preorders)) { ?> 

    <tr> 
    <td class="center"> 
    <form id="update" action="update" method="post"> 
    <input type="number" name="QTY[]" value="<?=$pre[QTY]?>" min="1" max="100"> 
    <input type="hidden" name="ID[]" value="<?=$pre[ID]?>"> 
    </form></td> 
    </tr> 

<?php } ?> 

内のフォームが含まれている間のloopp送信ボタン

<button type="submit" form="update">Update</button> 

プロセスページ

foreach ($_POST['ID'] as $key => $ID) { 
$QTY = $_POST['QTY'][$key]; 
mysql_query("UPDATE sessions SET QTY= '$QTY' WHERE ID = '$ID' "); 
} 

問題

foreachの更新のみ最初の項目があります。ほとんどの場合、複数のアイテムを更新する必要があります。問題はどこだ?

ありがとうございました!

+0

まだ動作しません... – Adrian

+2

[sql-injection](http://bobby-tables.com/)に脆弱です。 PHPでSQLインジェクションを防ぐにはどうすればよいですか?(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – FirstOne

+0

フォームでいいですか?彼らはあなたがそれらを望むように正確に画面に印刷されていますか? – dimlucas

答えて

0

コードに複数の問題が発生しています。同様

<input type="number" name="QTY[]" value="<?=$pre[QTY]?>" min="1" max="100">

と、この入力:まず、この入力の名前で[]を使用

<input type="hidden" name="ID[]" value="<?=$pre[ID]?>">

おそらく<?php ... ?>タグ内にそれらを配置します。

秒。 1つの更新ボタンだけがありますが、複数のフォームがあります。各フォームには独自の更新ボタンが必要です。このボタンは各<form>要素内に含める必要があります。

第3。廃止予定のmysql機能を使用しています。 mysqliまたはPDOに変更してください。

第4位。更新クエリにPrepared Statementsを使用する必要があります。そうしないと、コードはSQL Injectionの影響を受けます。