仅当PHP会话变量为';更新
我有一套相当简单的php表单,在用户最终提交信息之前,它会引导用户完成一个3步的过程 我使用会话变量在每个页面上保留数据,并将每个会话变量拉入可能已经提交的字段中,以便表单是“粘性的” 问题是,一旦他们到达表单的第三部分,如果他们使用提供的链接返回,就会出现错误,因为实际上没有来自第1部分的数据发布,因此没有为会话变量设置任何内容 为了解决这个问题,我为所有变量添加了以下代码:仅当PHP会话变量为';更新,php,forms,session,Php,Forms,Session,我有一套相当简单的php表单,在用户最终提交信息之前,它会引导用户完成一个3步的过程 我使用会话变量在每个页面上保留数据,并将每个会话变量拉入可能已经提交的字段中,以便表单是“粘性的” 问题是,一旦他们到达表单的第三部分,如果他们使用提供的链接返回,就会出现错误,因为实际上没有来自第1部分的数据发布,因此没有为会话变量设置任何内容 为了解决这个问题,我为所有变量添加了以下代码: if(!isset($_SESSION['home_tel'])){ session_regi
if(!isset($_SESSION['home_tel'])){
session_register('home_tel');
$_SESSION['home_tel'] = $_POST['home_tel'];
}
这很好,直到我意识到这意味着如果用户返回到第一个页面,它不会将会话更新到最新的数据,因为它已经设置好了,所以认为它不需要做任何事情
在更新会话变量之前,是否有一种简单的方法来检查会话值以查看它们是否已更改?或者,是否有一种方法可以检查其是否已发布,如果已发布,则创建变量。我试过如果(isset($\u POST['home\u tel'))。。。。等等,但这似乎不起作用
任何帮助都会很好
非常感谢,乔尼
if(isset($_POST['home_tel']) && ($_POST['home_tel'] != $_SESSION['home_tel'])){
$_SESSION['home_tel'] = $_POST['home_tel'];
}
如果提交了post,并且新值与旧值不同,这将设置
$\u会话['home\u tel']
。您不想再使用会话注册:
从PHP 5.3.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;
}
}
您好,这种方法很有效,但问题是第一行的$u会话出错,因为当我第一次发布时,它还没有注册会话变量?只要你再回去发帖就好了……这有意义吗?@Cliftwalker:怎么了?我猜你会收到一个警告,但是请随意分享这个错误。抱歉,谢弗,我因为某种原因错过了这个评论。你说得对,这是一个警告,而不是一个错误。我想我已经解决了这个问题,如果还没有创建会话,那么将会话变量设置为“”作为开始。