Re: [請益] php if的判斷

作者: cf1064 (蚵仔)   2014-09-23 22:17:24
※ 引述《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才有值,那怎麼沒值可以
: 先判斷?
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=651
session_is_registered
作者: heavenbetula (綠草)   2014-09-23 22:28:00
那這樣session_is_registered("userIP")一定沒有登記囉?因為userIP還沒有值然後因為!的原因所以一定會執行 if裡面的動作嗎/
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-09-23 22:32:00
session_is_registered()在5.4已經入土為安了相同功能請大方使用isset($_SESSION['userIP'])
作者: heavenbetula (綠草)   2014-09-23 22:34:00
5.2.6版本可以使用5.4的語法嗎?抱歉突然覺得上句這個問題很蠢...我去更新= ='
作者: cf1064 (蚵仔)   2014-09-24 00:24:00
如果你只有這個頁面,第一次進入,IF判斷結果應該是TRUE然後就會執行到 session_register('userIP');這時候userip就會被登記,然後當你重新整理時因為userip被登記且還存在,if的判斷結果會變falsesession_is_registered('userIP')=true,! true就是false就不會執行if內的東西不過這個的確之後版本拿掉了,改成isset是一樣的運作原理另外登記和給值是不一樣的事情唷早期版本要用session,你要先登記,才能給值session_register('userIP');把他當成是宣告一個變數$_SESSION['userIP]=$this->getIP; 就是給變數一個值session_is_registered('userIP')就是指這個變數是否存在如果你宣告一個變數,不給值,判斷他是否存在時那麼結果會是存在,除非你是判斷這個變數裡有沒有值
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-09-24 09:55:00
試試看便知,記得滿早就可以用isset()檢查session了
作者: heavenbetula (綠草)   2014-09-24 19:19:00
感謝各位大大熱心的解惑!

Links booklink

Contact Us: admin [ a t ] ucptt.com