我有一个基于PHP / MySQL的网站。每个表单(POST方法)使用文件头中的通用代码发送回每次发送表单时保存在SESSION变量中的变量:
session_start(); foreach ($_POST as $key => $value) {
if ($key != "submit") {
$_SESSION[$key] = $value;
}
foreach ($_SESSION as $key => $value) $$key = $value;
代码正常工作(没有错误,变量在SESSION中正确保存)。在表单本身中,每个字段都有一个对SESSION变量的引用,因此当用户返回到表单时,将调用SESSION中先前选择的变量,例如:
<input type="text" name="fmElement" id="fmElement" size="5" maxlength="2" value="<?php echo @$fmElement; ?>">
($ _ POST ['fmElement']保存在SESSION变量$ _SESSION ['fmElement']中,保存在变量$ fmElement后快速保存
我有一个名为“重启”的按钮,它只是简单地回忆一下页面(不是“回头”javascript;我真的回想起这个页面),并允许用户修改输入表单中的值,然后再次提交他们更新的请求。我的主要问题是,尽管SESSION变量已正确更新,但它不会显示SESSION变量的最新更改,而是之前保存的变量。但是,当我强制浏览器刷新页面时,会更新字段fmElement!
这是一个让它更清晰的例子: a)用户选择“K”作为第一元素(这是关于化学=> K =钾)。 b)用户单击“确定”并获取有关“K”的信息。 c)然后他想修改它并单击“重新启动”。 d)然后,他选择“Pb”(铅)并单击“确定”(再次)。 e)表格正确考虑了这一变化,并显示“Pb”的结果。 f)然而,这是错误......当他第二次点击“重启”时,浏览器会在fmElement字段中发回“K”(而不是“Pb”)... WTF?!? (为这个尴尬的表情道歉)。 g)只有当用户强制刷新页面时,字段fmElement才会正确显示“Pb”,证明SESSION变量$ _SESSION ['fmElement']已使用第二个请求正确更新(点d)。
我已经尝试了以下内容,但这些都不起作用...... 1)通过发送隐藏的“刷新”变量强制刷新页面并强制浏览器刷新javascript(介于......之间),如... ...
if (@$_POST['refresh'] == "1") echo "<script type='text/javascript'>window.reload();</script>";
2)强制浏览器不要使用这样的元保存在缓存中:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
我可以向您发送完整的原始代码,但这将总共> 500行...请问,有人可以帮助我吗?非常感谢提前!
于连
答案 0 :(得分:0)
我有同样的问题,我试图阻止缓存和所有其他事情。我最终解决它的唯一方法是使用GET请求而不是POST。或者,我最近通过在返回页面时执行PHP页面刷新解决了类似的问题。在返回到表单时将查询参数添加到URL上(这可能会解决问题,因为可能会因为不同的页面而中断缓存),然后如果该查询字符串存在,请执行header("Location: $url")
并将$ url设置为表单页面的位置,没有查询字符串。