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>
由于这两种形式都缺少 form
的 action
属性,我假设它们都在同一页上。这会导致问题,您一次只能提交一份表格。
在您提交第二个表单时,$_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">
...
我有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>
由于这两种形式都缺少 form
的 action
属性,我假设它们都在同一页上。这会导致问题,您一次只能提交一份表格。
在您提交第二个表单时,$_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">
...