2014-11-06 88 views
0

我每次向页面发送$_POST请求时都无法更新我的$_SESSION值。我当前的代码是:

foreach ($_POST as $key=>$value){ 
    foreach ($_SESSION as $key1=>$value1){ 
     if ($key == $key1){ 
      $_SESSION[$key1] = $_SESSION[$key1] + $_POST[$key]; 
     } 
    } 
} 

$_SESSION阵列不与后续$_POST值更新。我如何附加到$_SESSION阵列,以便当提交新的$POST请求时,它将更新$_SESSION阵列,如果$_SESSION = key的密钥为$_POST而不是替换其中的值?

我已确认$_SESSION$_POST的密钥设置正确并命名为 非常感谢!被stucked几乎每天:(

回答

2

如果我理解你说的话,尝试isset

foreach ($_POST as $key=>$value){ 
    if(isset($_SESSION[$key])) { 
      $_SESSION[$key] = $_SESSION[$key] + $_POST[$key]; 
     } 
    } 

你可以这样做:

$_SESSION[$key] += $_POST[$key]; 

相反的:

$_SESSION[$key] = $_SESSION[$key] + $_POST[$key]; 

(如果你想缩短它一点)

+0

对不起,但这不工作。 $ _SESSION [$ key]的值仍由$ _POST [$ key]的值替换。如果$ _SESSION和$ _POST的密钥相同,我需要更新$ _SESSION [$ key]值。 – 2014-11-06 06:06:24

+0

好的更新,即时消息看到这工作,如果我刷新,我如何确保我的$ _SESSION保留,当我离开页面?目前我按Back按钮 – 2014-11-06 06:23:27

+0

只要它没有过期,或者如果您关闭浏览器,它可能会关闭,但只要您浏览您的网站,它就会保留。到期时间可以由您的网站设置一个最大空闲时间,但除此之外,如果在会话中它将停留在那里,并且只在具有相同'keys'的$ _POST'上更新。 – Rasclatt 2014-11-06 06:25:41

3

首先,改变:

foreach ($_POST as $key=>$value){ 
    if (isset($_SESSION[$key])){ 
     $_SESSION[$key] += $value; 
    } 
} 

并添加所示的错误(尝试var_dump($_SESSION)

编辑:您也可以尝试array_intersect_key($_POST, $_SESSION)如此这将显示两个数组中相交的值(按键)。所以,代码如下:

$array = array_intersect_key($_POST, $_SESSION); 
var_dump($array); //just to check the values 

foreach ($array as $key=>$value){ 
    $_SESSION[$key] += $_POST[$key]; 
} 
+0

$ _SESSION中的值仍被替换而不是更新。 var_dump的一个例子是数组(9){[“Brocolli_with_scallops”] => int(3) – 2014-11-06 06:08:08

+0

请说明被替换和更新之间的区别...可能与一些随机值的替换 – 2014-11-06 06:09:18

+0

例如: $ _SESSION [ 'A] = 2 $ _POST [' 一] = 1 $ _SESSION [ '一] = 1 的更新例如: $ _SESSION [' 一] = 2 $ _POST ['a] = 1 $ _SESSION ['a] = 3 – 2014-11-06 06:09:53

0
foreach ($_POST as $key=>$value){ 
    if(array_key_exists($key, $_SESSION)) $_SESSION[$key] += $value; 
} 

试试这个..我已经消除了不必要的循环,使代码可读性,更容易调试。 希望我的理解与您的情况是正确的

+0

它仍然不起作用,只要我在发送新的$ POST后执行print_r($ _ SESSION),值仍然被替换而不是更新当前值 – 2014-11-06 06:18:33

+0

您是否复制并粘贴了我的码?运营商是+ =不= = ..请检查代码 – 2014-11-06 06:26:10