2014-11-06 41 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