Update语句从POST多行未更新


Update Statement from POST Multiple Rows Not Updating

我有一个表单,是在一个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');

如果我不使用[],那么它只更新一行。我希望它更新所有更改的行。目前,自从我添加了[],它没有更新任何东西。

请告诉我哪里错了

如果要一次又一次地循环相同的查询,请使用预处理语句。它还针对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));
    }
}