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