Php 记住表单信息

Php 记住表单信息,php,forms,Php,Forms,如果以前有人问过我,我很抱歉,但我觉得我的情况有点不同 我有一个巨大的表格(比如50个问题,包括复选框、下拉列表、文本框和文本区域) 当用户提交表单并且验证页面抛出错误时,是否有一种简单的方法来保存他们输入的信息 我的初始表单在form.php上,然后表单操作是form_posted.php,在form_posted.php上运行任何操作之前,我有我的验证代码,它会将用户发送回form.php,并带有一个错误号(例如form.php?error=3),如果其中任何操作有问题。这件事就这样结束了

如果以前有人问过我,我很抱歉,但我觉得我的情况有点不同

我有一个巨大的表格(比如50个问题,包括复选框、下拉列表、文本框和文本区域)

当用户提交表单并且验证页面抛出错误时,是否有一种简单的方法来保存他们输入的信息

我的初始表单在form.php上,然后表单操作是form_posted.php,在form_posted.php上运行任何操作之前,我有我的验证代码,它会将用户发送回form.php,并带有一个错误号(例如form.php?error=3),如果其中任何操作有问题。这件事就这样结束了

标题(“form.php?error=3”)

那么当我回到form.php时,发布的变量是否存在?即使页面没有特别发送任何已发布的变量

如果是这样的话,将文本框的值设置为以前的值是否完全安全


会话是您所需要的。请毫不犹豫地阅读:)

会话是您所需要的。请毫不犹豫地阅读:)

您应该使用它来处理此问题。在表单处理代码中,将$\u POST数组中识别的每个元素()设置为会话变量,例如:

session_start();

$_SESSION["myField"] = $_POST["myField"];
$_SESSION["myField2"] = $_POST["myField2"];
现在,如果您重定向回初始表单页面(例如,如果出现错误),您可以使用例如:

<input type="text" name="myField" value="<?php echo $_SESSION["myField"]; ?>" />
您应该使用来处理此问题。在表单处理代码中,将$\u POST数组中识别的每个元素()设置为会话变量,例如:

session_start();

$_SESSION["myField"] = $_POST["myField"];
$_SESSION["myField2"] = $_POST["myField2"];
现在,如果您重定向回初始表单页面(例如,如果出现错误),您可以使用例如:

<input type="text" name="myField" value="<?php echo $_SESSION["myField"]; ?>" />

如果需要将用户重定向回表单页面,而不只是再次显示表单页面,则会话非常有用。如果可能的话,最好不要重定向用户。当涉及到缓存时,POST请求通常比GET请求有更少的问题。有些浏览器在缓存中有点过于乐观,如果你还没有这样做的话,你就必须在页面中添加缓存信息

最好不要打乱他们对刷新按钮的想法。作为一个用户,如果99%的时间刷新页面,我希望页面能给我相同的输出。(值得注意的例外是带有验证码的表格和注册表格,这两种表格在重新提交时仍能很好地响应)。大多数浏览器会询问用户是否确定要重新提交表单

如果要使用会话,则需要在两个页面上使用session_start()函数。在表单页面上获取会话信息,在提交页面上保存会话信息。我不建议将整个$\u POST数组存储到会话变量中,因为您不知道其中包含什么,也不知道它将占用多少空间。您可以查看richsage的答案,了解如何在$\u会话中存储$\u POST信息。您可能还想考虑将数组中的字段存储在数组中,并使用数组保存这样的信息:
$allowed_fields = array('name', 'company', 'email');
foreach($allowed_fields as $field) {
  if(isset($_POST[$field])) {
    $_SESSION[$field] = $_POST[$field];
  }
}
当输出回表单时,请确保使用类似htmlspecialchars()或htmlentities()“>htmlentities()的内容转义输出,如下所示:


如果您需要将用户重定向回表单页面,而不是再次显示表单页面,则会话非常有用。如果可能,最好不要重定向用户。对于缓存,POST请求通常比GET请求的问题少。一些浏览器对缓存的性能有点过于乐观然后,如果您还没有这样做,就必须将缓存信息添加到页面中

最好不要打乱他们对刷新按钮的想法。作为一个用户,如果99%的时间刷新页面,我希望页面能给我相同的输出。(值得注意的例外是带有验证码的表单和注册表单,这两种表单在重新提交时仍能很好地响应)。大多数浏览器会询问用户是否确实要重新提交表单

如果要使用会话,则需要使用会话_start()在两个页面上都有函数。在表单页面上获取会话信息,在提交页面上将其保存到会话中。我不建议将整个$\u POST数组存储到会话变量中,因为您不知道其中包含的内容或它将占用多少空间。关于如何在$\u session中存储$\u POST信息,您可以参考richsage的答案您可能还想考虑将数组中的字段存储在数组中,并使用数组保存这样的信息:
$allowed_fields = array('name', 'company', 'email');
foreach($allowed_fields as $field) {
  if(isset($_POST[$field])) {
    $_SESSION[$field] = $_POST[$field];
  }
}
当输出回表单时,请确保使用类似htmlspecialchars()或htmlentities()“>htmlentities()的内容转义输出,如下所示:


so提取帖子并将所有设置为会话变量?:)对或者您可以将整个
$\u POST
存储到会话变量中。但是作为更好的选择,我可以建议您使用相同的脚本来显示表单和处理表单数据。这是一种被普遍接受的方法,可以将事情简化几次。如果您对代码有很好的理解,并且很少有时间进行重构,我建议您这样做。一般的模式是
if(isset($\u POST['submit']){$error=validate($\u POST);if($error==false){process_form();redirect($done_page);/*303参见其他*/}}显示_form($error)因此提取帖子并将所有设置为会话变量?:)对或者您可以将整个
$\u POST
存储到会话变量中。但是作为更好的选择,我可以建议您使用相同的脚本来显示表单和处理表单数据。这是一种被普遍接受的方法,可以将事情简化几次。如果您对代码有很好的理解,并且很少有时间进行重构,我建议您这样做。一般模式是
if(isset($\u POST['submit']){$error=validate($\u POST);if($error==false){process\u form();redirect($done\p