对于循环,$ i等于同一循环中的两个不同值

时间:2012-11-27 11:17:02

标签: php mysql

我有一个从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 个答案:

答案 0 :(得分:3)

第一个'1'是$id[$i]而非$i - 这里没有明显的问题。

答案 1 :(得分:2)

for($i = 0; $i <= $shift_total_records; $i++) 

将$ i设置为0,当你回显$ id [$ i]时,你会得到$ id [0]中的内容,第一个id,但是当你只回显$ i时你打印0因为你赚了$ id = 0

答案 2 :(得分:1)

第一次使用$ i时,您第二次使用$id[$i]时会按照$i使用它。

答案 3 :(得分: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]'");