我有一套非常简单的php表单,可以让用户在最终提交信息之前完成3个步骤。
我正在使用会话变量来保留每个页面上的数据,并将每个会话变量拉入可能已经提交的字段,以便表单是“粘性的”。
问题是,一旦他们到达表单的第3部分,如果他们使用提供的链接向后返回,则会出错,因为实际上没有来自第1部分的数据的POST,所以没有任何设置对于会话变量。
为了解决这个问题,我为所有变量添加了以下代码:
if(!isset($_SESSION['home_tel'])){
session_register('home_tel');
$_SESSION['home_tel'] = $_POST['home_tel'];
}
这个工作正常,直到我意识到这意味着如果用户返回到第一页,它将不会将会话更新为已经设置的最新数据,因此认为它不需要做任何事情。
在更新会话变量之前,是否有一种简单的方法可以检查会话值以查看它们是否已更改?或者,只有一种方法可以检查是否已发布,如果是,则创建变量。我试过if(isset($ _ POST ['home_tel']))....等但这似乎不起作用。
任何帮助都会很棒?
非常感谢,Jonny
答案 0 :(得分:2)
if(isset($_POST['home_tel']) && ($_POST['home_tel'] != $_SESSION['home_tel'])){
$_SESSION['home_tel'] = $_POST['home_tel'];
}
如果提交了帖子并且新值与旧值不同,则会设置$_SESSION['home_tel']
。
答案 1 :(得分:0)
答案 2 :(得分:0)
首先,正如您所发现的那样,在会话中存储交易数据是一个坏主意。您已经遇到了后退按钮的问题,当用户在同一会话中打开第二个窗口时,您很快就会发现问题。
在更新会话变量之前,是否有一种简单的方法可以检查会话值以查看它们是否已更改?
为什么呢?覆盖会话变量没有任何开销 - 实际上,代码有每次都要写会话以阻止它过期。如果必须使用会话变量,只需为字段使用唯一名称,并相应地预填充会话....
$reserved_values=array('email','authenicated_user');
foreach ($_POST as $name=>$val) {
if (!in_array($name, $reserved_values)
&& array_key_exists($name, $_SESSION)) {
$_SESSION[$name]=$val;
}
}