2012-02-26 38 views
0

我需要獲得最後一個非空值$_GET['id_item']

session_start(); 

if(!isset($_SESSION['id_item']) || $_SESSION['id_item']==='' || (isset($_GET['id_item']) && !$_GET['id_item'] === '')){ 
    $_SESSION['id_item'] = $_GET['id_item']; 
}else{ 
    /*no need to update*/ 
} 

echo $_SESSION['id_item'] /* Allways in blank :S */ 

而且var_dump($_GET)輸出:

array(1) { ["id_item"]=> string(2) "50" } 

任何想法,爲什麼$_SESSION不保存?

+0

什麼的var_dump'結果($ _ SESSION);' – xdazz 2012-02-26 12:32:04

+0

你也忘了;在你提供的代碼的最後一行。 – MichaelH 2012-02-26 12:35:42

+0

你能迴應$ _GET ['id_item']嗎?看看它是否爲空 – SolidSnake 2012-02-26 12:36:21

回答

1

修復此:

$_SESSION['id_item']==''$_SESSION['id_item']===''

,或者您可以使用:

empty($_SESSION['id_item']) 
+0

我編輯了一下問題。你的答案是爲第一個值得到的,但在下一個中,s_session保持爲空 – 2012-02-26 13:18:54

0

有你start_session之前輸出任何東西。如果是這樣,它將無法發送cookie。這可能是它不工作的原因。

+0

它不是一個cookie,它是一個會話變量! – 2012-02-26 12:41:11

+0

服務器向瀏覽器發送一個cookie,以便將來的頁面知道會話數據存儲中要查找的會話。 Reade http://www.htmlgoodies.com/beyond/php/article.php/3472581/PHP-Tutorial-Sessions.htm來解釋cookie和會話之間的關係。 PHPSESSID是cookie的名稱(通常) – 2012-02-26 12:56:53

1

除非您預計(有效)ID爲0,您可以將!isset($_SESSION['id_item']) || $_SESSION['id_item']===''減少爲empty($_SESSION['id_item'])!$_GET['id_item'] === ''始終是錯誤的,因爲這將轉換爲false === ''。您可能正在尋找$_GET['id_item'] !== ''。同樣,如果0不是有效值,那麼您可以在此處尋找!empty($_GET['id_item'])

也就是說,整個!isset($_SESSION['id_item']) || $_SESSION['id_item']===''部分條件沒有多大意義。第二部分「if _GET id_item present」總是需要條件的主體($_SESSION['id_item'] = $_GET['id_item'];)才能工作。所以,你可以減少你的條件

<?php 
if (!empty($_GET['id_item'])) { 
    // import new id_item 
    $_SESSION['id_item'] = $_GET['id_item']; 
} elseif (!isset($_SESSION['id_item'])) { 
    // make sure we don't run into an undefined array index notice 
    $_SESSION['id_item'] = null; 
} 

var_dump($_SESSION['id_item]);