Re: [请益] php if的判断

楼主: heavenbetula (绿草)   2014-09-25 22:21:04
※ 引述《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()的结果会这样?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-09-25 23:00:00
在开头加print_r($_SESSION)看里面到底有什么。顺便告诉你session_register()也过时了 本人从写php以来(大概是死亡笔记本连载的时候)从来没用过这个函数
楼主: heavenbetula (绿草)   2014-09-25 23:14:00
print_r($_SESSION)会Undefined variable: _SESSION
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-09-26 00:18:00
太夸张了 起码要显示 Array() 你session可能坏掉了
作者: up9cloud (九天)   2014-09-26 05:40:00
不要在开头加,放session_start();之后一行...
楼主: heavenbetula (绿草)   2014-09-26 19:46:00
会显示Array ( [userIP] => 127.0.0.1 )而这不就表示我原先的想法应该是没错的吧...userIP一开始未定义 第二次执行有定义而且有值了
作者: Kenqr (function(){})()   2014-09-27 11:18:00
print_r(isset($_SESSION['userIP']))呢?
作者: KawasumiMai (さあ、死ぬがいい)   2014-09-27 15:59:00
你贴的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?
楼主: heavenbetula (绿草)   2014-09-28 08:01:00
恩我也这么觉得 ~
作者: KawasumiMai (さあ、死ぬがいい)   2014-09-28 16:20:00
把 $this->getIP; 全部改成 $this->getIP();跟语法旧不旧没什么关系$this上没有getIP这个变量,存取回来可能为null赋予$_SESSION[userIP]==null的boolean可能刚好两种情况都发生。用isset去判断是一样的结果只是你要会除错,留下那个class,留下function删除额外的东西,直接呼叫,echo出值,f5看结果

Links booklink

Contact Us: admin [ a t ] ucptt.com