Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当PHP会话变量为';更新_Php_Forms_Session - Fatal编程技术网

仅当PHP会话变量为';更新

仅当PHP会话变量为';更新,php,forms,session,Php,Forms,Session,我有一套相当简单的php表单,在用户最终提交信息之前,它会引导用户完成一个3步的过程 我使用会话变量在每个页面上保留数据,并将每个会话变量拉入可能已经提交的字段中,以便表单是“粘性的” 问题是,一旦他们到达表单的第三部分,如果他们使用提供的链接返回,就会出现错误,因为实际上没有来自第1部分的数据发布,因此没有为会话变量设置任何内容 为了解决这个问题,我为所有变量添加了以下代码: if(!isset($_SESSION['home_tel'])){ session_regi

我有一套相当简单的php表单,在用户最终提交信息之前,它会引导用户完成一个3步的过程

我使用会话变量在每个页面上保留数据,并将每个会话变量拉入可能已经提交的字段中,以便表单是“粘性的”

问题是,一旦他们到达表单的第三部分,如果他们使用提供的链接返回,就会出现错误,因为实际上没有来自第1部分的数据发布,因此没有为会话变量设置任何内容

为了解决这个问题,我为所有变量添加了以下代码:

    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:怎么了?我猜你会收到一个警告,但是请随意分享这个错误。抱歉,谢弗,我因为某种原因错过了这个评论。你说得对,这是一个警告,而不是一个错误。我想我已经解决了这个问题,如果还没有创建会话,那么将会话变量设置为“”作为开始。