为什么当用户返回页面时,我的表单数据会消失


Why does my form data disappear when the user is taken back to the page?

我们的网站上有一个表单,它是使用一些非常简单的PHP生成的。不涉及javascript或任何东西,并且每次的形式都是相同的。

如果用户填写的表格不完整,他们会被带到一个页面,上面写着"嘿,请返回并填写所有字段"。当他们按下后退按钮时,他们会被带回表格。

在Chrome中,他们输入的表单数据仍然存在。但在Firefox中(至少在firefox3.6中),所有的表单数据都消失了。

我们不做任何特别的事情来保存表单值。为什么Chrome保存了它们,而Firefox却没有?我们应该做什么"标准"的事情来保护它们?

谢谢。

大多数浏览器在点击后退按钮时都会加载缓存页面,但我猜FF3.6不会。不加载页面缓存版本的浏览器将对服务器执行新的GET操作,当他们单击后退按钮时,该操作将呈现一个空表单。

但我认为你应该重新考虑你的解决方案。因为如果用户输入的表单不正确,通常的行为是张贴到同一页面,然后显示带有预先填写的表单值的同一页面。如果用户正确地输入了表单,那么一件好事就是实际重定向到同一个页面(或者另一个页面)。这被称为PRG模式。

正如您所注意到的,点击"返回"按钮后表单值是否会出现取决于浏览器。据我所知,标准的解决方案是不为错误消息提供单独的页面,而是使用包含相同表单的页面进行响应,该页面预先填充了用户输入的值(最好是指示需要填写哪些字段)。

例如:表单位于/form.php,看起来如下:

<form action="/form.php" method="POST">
     <input type="text" name="foo" />
     <input type="submit" value="Submit" />
</form>

/form.php(伪代码;我几乎从不编写PHP)中:

if (this is a GET request) {
    echo the form;
}
else (if this is a POST request) {
    if (field values are correct) {
        processValues(...);
        redirectToConfirmationPage();
    }
    else {
        echo "<form action='/form.php' method='POST'>";
        echo "    <input type='text' name='foo' value='$theValueTheUserEntered'/>";
        echo "    <span class='error'>Field is incorrect or empty</span>";
        echo "    <input type='submit' value='Submit' />";
        echo "</form>";
    }
}

也许这只是您当前Firefox安装的个人设置(即从不保存数据表单)。

如果在另一台装有firefox的电脑上工作,请尝试一下。

这是单个浏览器自身独有的行为;服务器端无法强制所有浏览器"记住"那里的数据。

要解决此问题,请尝试使用用户输入的有效值重新显示表单,这些值已作为表单字段的"默认"值转储。这是大多数知名web应用程序所做的。

有些浏览器会记住表单,有些则不会。这就是为什么如果表单已经提交,就需要在PHP中重新填充值。

相关文章: