2012-02-26 108 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]);