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

时间:2011-06-04 16:25:57

标签: php html forms

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

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

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

我们不会做任何特殊的事情来保存表单值。为什么Chrome会保存它们而Firefox却不是?我们应该采取什么样的“标准”措施来保护它们?

感谢。

5 个答案:

答案 0 :(得分:2)

大多数浏览器在单击后退按钮时加载缓存页面,但我猜FF3.6没有。未加载页面缓存版本的浏览器将对您的服务器执行新的GET,当他们单击后退按钮时将呈现空表单。

但我认为您应该考虑重新考虑您的解决方案。因为正常行为是发布到同一页面,然后如果用户输入的表单不正确,则显示具有预填表格值的同一页面。如果用户正确输入表单,那么做的一件好事就是实际重定向到同一页面(或其他页面)。这称为PRG pattern

答案 1 :(得分:1)

正如您所注意到的,在点击“返回”按钮后表单值是否存在依赖于浏览器。据我所知,标准解决方案是没有单独的页面来显示错误消息,而是使用包含相同表单的页面进行响应,预先填充用户输入的值(最好是指示哪些领域需要完成。)

例如:表单位于/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>";
    }
}

答案 2 :(得分:0)

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

如果在另一台使用firefox的电脑上运行,请尝试使用。

答案 3 :(得分:0)

这是各个浏览器本身独有的行为;服务器端没有任何东西可以强制所有浏览器“记住”那里的数据。

要解决此问题,请尝试使用用户已输入的有效值重新显示表单作为表单字段的“默认”值。这就是大多数大牌网络应用的功能。

答案 4 :(得分:0)

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