我有一个要填充的HTML表单,然后使用JSON将表单数据发送到PHP页面,在这一阶段,我已经检查了在控制台日志上发送的数据,并且确实将其发送到PHP页面,然后我将发送使用foreach循环将数据发送到MySQL数据库,这是我遇到的问题。

$ _POST数组中最后的输入为HTML形式的$ key => $ entry是唯一发送到数据库的输入,其余数据未发送,我的意思是,如果我有六对$ key => $ entry输入,只有最后一对n $ Key => $ entry输入被发送到数据库,我尝试了各种各样的方法,但是没有任何作用。

我认为我的问题在于使用foreach循环进行更新。

foreach ($_POST as $key => $entry) {
    $sql = "UPDATE form SET Quantity='$entry' WHERE Pipesize='$key'";
    echo  "$key"." ". 'has input of'." ". "$entry","<br>";
}
if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

mysqli_close($conn);

最佳答案

mysqli_query在循环之后,因此它将仅执行最后一个。将mysqli_query放入您的循环中。并使用准备好的语句来防止sql注入,并且永远不要直接使用$ _POST而无需检查,人们可以轻松地操纵您的发布请求

foreach ($_POST as $key => $entry) {
    $sql = "UPDATE form SET Quantity='$entry' WHERE Pipesize='$key'";
    echo  "$key"." ". 'has input of'." ". "$entry","<br>";

    if (mysqli_query($conn, $sql)) {
        echo "Record updated successfully";
    } else {
        echo "Error updating record: " . mysqli_error($conn);
    }
}

mysqli_close($conn);


准备语句的示例,没有对其进行测试。如果您想了解有关准备好的法规的更多信息,请访问w3schools

$stmt = $conn->prepare("UPDATE form SET Quantity = ? WHERE Pipesize = ?");
$stmt->bind_param('ii', $entry, $key);

foreach ($_POST as $key => $entry) {
    $stmt->execute();
    echo  "$key"." ". 'has input of'." ". "$entry","<br>";

    if ($stmt->affected_rows > 0) {
        echo "Record updated successfully";
    } else {
        echo "Error updating record: " . $stmt->error;
    }
}

$stmt->free_result();
$stmt->close();

10-07 12:34
查看更多