PHP 如何在重新提交表单时阻止变量被重写

PHP How to stop variable from being rewritten when form resubmitted

我有2个表格,第一个在数据库table中获取一个人的ID。第二个获取要为该 ID 更新的名称 and/or 地址。刷新页面时,我丢失了 ID 的值。下面是我如何向 id 声明和发布一个值。当提交下一个表单并刷新页面时,如何阻止它被重写? (session_start() 位于文档顶部)

 $_SESSION['ID'] = $_POST['id'];
 $id = $_SESSION['ID']; 

表格 1:

 <form method="post">
    <p style="margin-top: 70px;">Please type the ID of the person you wish to add to change their data</p>
    <p style="margin-bottom: 0px;">ID</p>
    <input style="color:black" type="text" name="id" placeholder="10001">
    <input style="color:lightblue;background-color: rgb(80,80,80);margin-top: 7px;" type="submit" value="Submit">
</form>

表格 2:

 <form method="post">
    <p>New Information for Customer with ID entered above</p>
    <input style='color:black;' type="text" name="newName" placeholder="New Name">
    <input style="color:black;" type="text" name="newAddress" placeholder="New Address">
    <input style="color:lightblue;background-color: rgb(80,80,80);margin-top: 7px;" type="submit" value="Submit">
</form>

由于这两种形式都缺少 formaction 属性,我假设它们都在同一页上。这会导致问题,您一次只能提交一份表格。 在您提交第二个表单时,$_POST 数据将被设置为该表单中可用的字段,因此 $_POST['id'] 被删除。由于您似乎总是调用 $_SESSION['ID'] = $_POST['id']; 您将用 NULL 重写它并因此删除该条目。您可以改为检查 id 是否真的提交了:

if (array_key_exists('id', $_POST)) {
    $_SESSION['ID'] = $_POST['id'];
}
$id = $_SESSION['ID'];

像这样你的会话将保留 id。

或者,因为您的第二个表单中没有任何需要从指定用户加载数据的字段,您也可以将输入字段合并到您的第一个表单中。像这样,id总是会再次提交并保留,因为它是提交的form.

的一部分
<form method="post">
    <p style="margin-top: 70px;">Please type the ID of the person you wish to add to change their data</p>
    <p style="margin-bottom: 0px;">ID</p>
    <input style="color:black" type="text" name="id" placeholder="10001">
    <p>New Information for Customer with ID entered above</p>
    <input style='color:black;' type="text" name="newName" placeholder="New Name">
    <input style="color:black;" type="text" name="newAddress" placeholder="New Address">
    <input style="color:lightblue;background-color: rgb(80,80,80);margin-top: 7px;" type="submit" value="Submit">
</form>

此外,您应该将给定的值提交回用户,以便表单保留以下字段:

<input style="color:black" type="text" name="id" value="<?= $id ?? '' ?>" placeholder="10001">
<input style="color:black;" type="text" value="<?= array_key_exists('newAddress', $_POST) ? $_POST['newAddress'] : '' ?>" name="newAddress" placeholder="New Address">
...