から生成された小さなフォームがあり、mysqli->query
各入力名を。などの配列に設定しましたname="Shift_ID[]"
。次に、ループするときに一度に1つずつレコードをfor loop
対象とするaがあります。UPDATE
私が抱えている問題は、$i
変数が同じループ内の異なる値であり、その理由がわからないことです。これは私のコードです:
if(isset($_POST['update_submit']))
{
$id = $_POST['Shift_ID'];
$name = $_POST['Shift_Name'];
$short_name = $_POST['Shift_Short_Name'];
$color = $_POST['Shift_Color'];
$shift_total_records = "5";
for($i = 0; $i <= $shift_total_records; $i++)
{
$sql = ("UPDATE shift SET Shift_ID = '$id[$i]', Shift_Name = '$name[$i]', Shift_Short_Name = '$short_name[$i]', Shift_Color = '$color[$i]' WHERE Shift_ID = '$i'");
echo "SQL: " . $sql . "<br>";
if(!$result_shift_update = $mysqli->query($sql))
{
die ('There was an error updating the shift table [' . $mysqli->error . ']');
}
}
}
これecho
を返します:
SQL: UPDATE shift SET Shift_ID = '1', Shift_Name = 'Morning', Shift_Short_Name = 'AM', Shift_Color = '#FF0000' WHERE Shift_ID = '0'
期待していたShift_ID = '1'
とWHERE Shift_ID = '1'
。誰かがこれが起こっている理由を説明できますか?また、誰かがそれを言う前に、私はこれがインジェクション攻撃にさらされていることを知っています、そして私は準備されたステートメントを使う必要があります。
*編集:*Shift_ID = '$id[$i]'
私がそれを持っていた理由は、ユーザーが必要に応じてフィールドWHERE Shift_ID = '$i'
を変更できるようにしたかったからです。Shift_ID
重要なのは、順序を並べ替えるオプションがあることです。これShift_ID
はですPRIMARY KEY
ので、同じ番号を2回使用しようとするとエラーが発生しますが、これを私が望むことを実行させる方法はありますか?