0

から生成された小さなフォームがあり、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回使用しようとするとエラーが発生しますが、これを私が望むことを実行させる方法はありますか?

4

4 に答える 4

3

最初の「1」はそうではあり$id[$i]ません$i-ここで明らかな問題はありません。

于 2012-11-27T11:19:41.793 に答える
2
for($i = 0; $i <= $shift_total_records; $i++) 

$ iを0に設定すると、$ id [$ i]をエコーすると、最初のIDである$ id [0]のコンテンツが取得されますが、$ iのみをエコーすると、$ id = 0にしたため、0が出力されます。

于 2012-11-27T11:27:24.187 に答える
1

初めて$iを使用するときは、次$id[$i]のように使用します。2回目に使用するときは$i...。

于 2012-11-27T11:20:42.183 に答える
1

場所ごとに異なる変数を使用しました。これはどういう意味ですか:

$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 = '$id[$i]'");
于 2012-11-27T11:22:40.637 に答える