我们的网站上有一个使用一些非常简单的PHP生成的表单。没有javascript或任何涉及的内容,每次都是相同的形式。
如果用户填写不完整的表单,他们会被带到一个页面上写着“嘿,请返回并填写所有字段”。当他们点击后退按钮时,他们会被带回表格。
在Chrome中,他们输入的表单数据仍然存在。但在Firefox中(至少在Firefox 3.6中),所有表单数据都已消失。
我们不会做任何特殊的事情来保存表单值。为什么Chrome会保存它们而Firefox却不是?我们应该采取什么样的“标准”措施来保护它们?
感谢。
答案 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中重新填充值,如果它已经提交了。