※ 引述《cf1064 (蚵仔)》之铭言:
: ※ 引述《heavenbetula (绿草)》之铭言:
: : 小弟初学php,看书上范例不是很懂,想麻烦各位大大解惑
: : 以下是书中撷取的一小段程式:
: : session_start();
: : if(!session_is_registered("userIP")){
: : session_register("userIP");
: : $_SESSION["userIP]=$this->getIP;
: : $sql="update dailyistics set visitNum=visitNum+1 where visitDate='" . $setDate .
: : "'";
: : mysql_query($sql);
: : }else{
: : $_SESSION["userIP"]=$this->getIP;
: : }
: : 其中,getIP是一个function的名称(有传回值)
: : 我的问题是,为什么在做if判断的时候,userIP都还没有给值,却可以做判断呢?
: : 因为不是在if中的$_SESSION["userIP] = $this->getIP,userIP才有值,那怎么没值可以
: : 先判断?
由于程式执行后不是想要的结果,所以想再请教一下各位大大是否我哪里观念错误
以下是我的想法:
我将原文code中if(!session_is_registered("userIP"))
改成if(!isset($_SESSION['userIP']))
第一次执行这个页面的时候,由于$_SESSION['userIP']还未定义
所以isset()的结果为false,然后!后变成true→执行if内的动作$_SESSION['userIP']
赋与一个ip的值
第二次之后执行这个页面的时候,由于session的关系,$_SESSION['userIP']
的资料还保留着,所以isset()的结果应该为true,然后!后变成false→执行else内的动作
但是问题来了...第二次执行,isset()的结果却一直是flase
请问我哪里理解错误吗?为什么isset()的结果会这样?
在开头加print_r($_SESSION)看里面到底有什么。顺便告诉你session_register()也过时了 本人从写php以来(大概是死亡笔记本连载的时候)从来没用过这个函数
print_r($_SESSION)会Undefined variable: _SESSION
太夸张了 起码要显示 Array() 你session可能坏掉了
作者: up9cloud (九天) 2014-09-26 05:40:00
不要在开头加,放session_start();之后一行...
会显示Array ( [userIP] => 127.0.0.1 )而这不就表示我原先的想法应该是没错的吧...userIP一开始未定义 第二次执行有定义而且有值了
作者:
Kenqr (function(){})()
2014-09-27 11:18:00print_r(isset($_SESSION['userIP']))呢?
你贴的code是拿掉的情况,没提到class的问题所以现在的问题是,你class是怎么写的如果getIP() 可以正常print_r(Array),isset也是1那就看你砍掉前怎么写的,不能丢个砍掉后的code发问然后要别人抓砍掉前的bug...因为session_start();print_r($_SESSION);这两行单跑会undefined的话无解= =...但听起来你不是这个问题
作者:
tkdmaf (皮皮快跑)
2014-09-27 23:04:00$_SERVER本来就是全域变量为何还要global?
把 $this->getIP; 全部改成 $this->getIP();跟语法旧不旧没什么关系$this上没有getIP这个变量,存取回来可能为null赋予$_SESSION[userIP]==null的boolean可能刚好两种情况都发生。用isset去判断是一样的结果只是你要会除错,留下那个class,留下function删除额外的东西,直接呼叫,echo出值,f5看结果