0

我有一个从 a 生成的小表单,mysqli->query并且我将每个输入名称设置为一个数组,例如name="Shift_ID[]". 然后我有一个for loop意思是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_IDPRIMARY KEY所以如果他们尝试使用相同的数字两次,他们会得到一个错误,但是有没有办法让它做我想要的?

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[0] 中的内容,即第一个 id,但是当您仅回显 $i 时,您会打印 0,因为您设置了 $id = 0。

于 2012-11-27T11:27:24.187 回答
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 回答
1

第一次使用 $i 时,您按如下方式使用它,$id[$i]第二次使用$i....

于 2012-11-27T11:20:42.183 回答