POST多行更新语句未更新

时间:2014-07-14 14:29:31

标签: php mysql

我有一个while循环的表单,所以可以有很多行。我已将[]添加到名称中,因为我知道如果每个行输入的名称相同,它将不会更新。这是我输入的一行输入的简短片段:

<td><input type='hidden' name='rowID[]' value='$rowID'>$date</td>
<td width='70'>$billable</td><td width='100'><input value='$details[]' type='text' name='details[]' style='padding:2px;' size='15'></td>
<td width='50'><input value='$parking' type='text' name='parking[]' value='0.00' style='padding:2px;' size='7'></td>
<td width='75'><input value='$mileage' type='text' value='0.00' name='mileage[]' style='padding:2px;' size='10'></td>
<td width='75'><input value='$taxis' type='text' value='0.00' name='taxi[]' style='padding:2px;' size='10'></td><td width='50'>

然后使用以下方式在另一页上处理此表单:

foreach ($_POST['rowID'] as $index => $id) {
    $sql = "UPDATE b_expense_report SET DETAILS = '".$_POST['details'][$index]."', 
    PARKING = '".$_POST['parking'][$index]."', 
    MILEAGE = '".$_POST['mileage'][$index]."', 
    TAXIS = '".$_POST['taxi'][$index]."'
    WHERE ID = '".$_POST['rowID']."'";

    if (!mysqli_query($con,$sql))
    {
        die('Error: ' . mysqli_error($con));
    }
}
header('Location: mywebsite.com');

如果我在没有[]的情况下这样做,那么它只会更新一行。我希望它更新所有更改的行。目前,我添加了[]它没有更新任何内容。

请让我知道我哪里出错。

1 个答案:

答案 0 :(得分:0)

如果您反复循环同一个查询,请使用预准备语句。它还会根据SQL注入清理您的输入,而您根本不会这样做。在我的头顶代码完全未经测试:

$sql = "UPDATE b_expense_report SET DETAILS=?, PARKING=?, MILEAGE=?, TAXIS=? WHERE ID=?";
$stmt = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt, "sssss", $details, $parking, $mileage, $taxi, $id);

foreach ($_POST['rowID'] as $index => $id) {
    $details = $_POST['details'][$index];
    $parking = $_POST['parking'][$index];
    $mileage = $_POST['mileage'][$index];
    $taxi = $_POST['taxi'][$index];
    if (!mysqli_stmt_execute($stmt)) {
        die('Error: ' . mysqli_error($con));
    }
}