我有一个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');
如果我在没有[]的情况下这样做,那么它只会更新一行。我希望它更新所有更改的行。目前,我添加了[]它没有更新任何内容。
请让我知道我哪里出错。
答案 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));
}
}