记住表单信息

时间:2010-04-26 21:29:16

标签: php forms

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

我有一个庞大的表格(如50个问题涉及复选框,下拉菜单,文本框和textareas)

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

我的初始形式在form.php上,然后表单操作是form_posted.php,在form_posted.php上运行任何东西之前我有我的验证代码,它将用户发送回带有错误编号的form.php(例如。 form.php?error = 3)如果特别是有任何问题。这是通过

完成的

header("form.php?error=3")

所以当我回到form.php上时,发布的变量是否存在?即使页面没有专门发送任何发布的变量。

此外,如果是这种情况,将文本框的值设置为之前是否完全安全?

喜欢<input type="text" value="php echo $_POSTED["username"] ?>">

3 个答案:

答案 0 :(得分:2)

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

session_start();

$_SESSION["myField"] = $_POST["myField"];
$_SESSION["myField2"] = $_POST["myField2"];

现在,如果您重定向回初始表单页面(例如,如果有错误),您可以使用例如:

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

预先填充该字段。您需要将<?php session_start(); ?>添加到表单页面的顶部,以确保您设置的会话变量可用于表单。

答案 1 :(得分:1)

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

最好不要破坏他们对刷新按钮的作用的心态。作为用户,如果99%的时间刷新页面,我希望页面给我相同的输出。 (值得注意的例外是CAPTCHA和登记表格的表格,这两种表格对重新提交仍然有良好的反应)。大多数浏览器会询问用户他们是否确定要重新提交表单。

如果要使用会话,则需要在两个页面上使用session_start()函数。在表单页面上获取会话信息,并在提交页面上将其保存到会话中。我不建议将整个$ _POST数组存储到会话变量中,你不知道那里有什么或者它需要多少空间。您可以查看richsage关于如何在$ _SESSION中存储$ _POST信息的答案。您可能还需要考虑将所需的字段存储在数组中,并使用该数组来保存信息,如下所示:

$allowed_fields = array('name', 'company', 'email');
foreach($allowed_fields as $field) {
  if(isset($_POST[$field])) {
    $_SESSION[$field] = $_POST[$field];
  }
}

在表单上输出时,请务必使用类似htmlspecialchars()或htmlentities()“&gt; htmlentities()之类的内容来转义输出:

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

否则您的代码将被XSS (Cross Side Scripting)怀疑。

答案 2 :(得分:0)

会话就是您所需要的。请不要犹豫,阅读fine manual:)