简体   繁体   English

POST多行中的更新语句未更新

[英]Update Statement from POST Multiple Rows Not Updating

I have a form that is in a while loop so there can be numerous rows. 我有一个在while循环中的表格,所以可以有很多行。 I have added [] to the name as I am aware it won't update if the name is the same for each row input. 我已经在名称中添加了[],因为我知道如果每行输入的名称都相同,它将不会更新。 This a short snippet of the row of inputs I have: 这是我输入的行的一小段:

<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'>

This form then gets processed on another page using: 然后使用以下方法在另一页上处理此表单:

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');

If I were to do it without the [] then it just updates one row. 如果我没有使用[],则它只会更新一行。 I want it to update all rows that are changed. 我希望它更新所有更改的行。 Currently since I added the [] its not updating anything. 目前,由于我添加了[],因此未更新任何内容。

Please let me know where I am going wrong. 请让我知道我要去哪里了。

If you're looping over the same query over and over again, use prepared statements. 如果要一遍又一遍地遍历同一查询,请使用准备好的语句。 It also sanitizes your input against SQL injection, which you are not doing at all. 它还可以针对SQL注入清除您的输入,而您根本没有这样做。 Totally untested off the top of my head code: 完全没有经过我的头代码测试:

$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));
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM