PHP 板


LINE

看板 PHP  RSS
※ 引述《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()的结果会这样? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.231.9.104
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/PHP/M.1411654867.A.D67.html ※ 编辑: heavenbetula (61.231.9.104), 09/25/2014 22:22:06
1F:→ MOONRAKER: 在开头加print_r($_SESSION)看里面到底有什麽。 09/25 23:00
2F:→ MOONRAKER: 顺便告诉你session_register()也过时了 本人从写php以 09/25 23:00
3F:→ MOONRAKER: 来(大概是死亡笔记本连载的时候)从来没用过这个函数 09/25 23:06
4F:→ heavenbetula: print_r($_SESSION)会Undefined variable: _SESSION 09/25 23:14
5F:→ MOONRAKER: 太夸张了 起码要显示 Array() 你session可能坏掉了 09/26 00:18
6F:推 up9cloud: 不要在开头加,放session_start();之後一行... 09/26 05:40
7F:→ heavenbetula: 会显示Array ( [userIP] => 127.0.0.1 ) 09/26 19:46
8F:→ heavenbetula: 而这不就表示我原先的想法应该是没错的吧... 09/26 21:28
9F:→ heavenbetula: userIP一开始未定义 第二次执行有定义而且有值了 09/26 21:28
10F:推 Kenqr: print_r(isset($_SESSION['userIP']))呢? 09/27 11:18
由於我的function都放在class中,所以测试print_r($_SESSION),和 print_r(isset($_SESSION['userIP']))时,$this->getIP都会跑出$this Undefined 所以我都会先把class砍掉,然後原本 $_SESSION["userIP"]=$this->getIP; 我会把他改成 $_SESSION["userIP"]= getIP();所以测试print_r($_SESSION)会显示 Array ( [userIP] => 127.0.0.1,而测试 print_r(isset($_SESSION['userIP']))第一 次什麽都没显示,第二次执行会显示 1 ,一切正常。 所以我在想是因为$this->getIP跟getIP()的问题吗? ※ 编辑: heavenbetula (61.228.78.185), 09/27/2014 14:52:12
11F:→ KawasumiMai: 你贴的code是拿掉的情况,没提到class的问题 09/27 15:59
12F:→ KawasumiMai: 所以现在的问题是,你class是怎麽写的 09/27 15:59
13F:→ KawasumiMai: 如果getIP() 可以正常print_r(Array),isset也是1 09/27 16:00
14F:→ KawasumiMai: 那就看你砍掉前怎麽写的,不能丢个砍掉後的code发问 09/27 16:00
15F:→ KawasumiMai: 然後要别人抓砍掉前的bug... 09/27 16:01
16F:→ KawasumiMai: 因为session_start();print_r($_SESSION);这两行单跑 09/27 16:02
17F:→ KawasumiMai: 会undefined的话无解= =...但听起来你不是这个问题 09/27 16:03
我会出现undefined就是因为我是在class visirData上一行print_r($_SESSION); 我说的把class拿掉指的是将class visitData的大括弧拿掉这样而已 因为拿掉後,print_r($_SESSION)就可显示出Array ( [userIP] => 127.0.0.1 ) 以下是完整程式: <?php class visitData { var $userName = "root"; //帐号 var $password = "12345"; //密码 var $hostName = "localhost"; //主机(Server)名称 //设定目前页面访问数 function setDailyPageNum($setDate) { //建立资料连结 $mylink = mysql_connect($this-> hostName, $this-> userName, $this-> password); //选择资料库 mysql_select_db("visitdata", $mylink); //指定提取资料的校对字元表 mysql_query("set character set big5"); $sql="select * from dailyistics where visitDate='" . $setDate . "'"; $dataList=mysql_query($sql); if ($arr_result=mysql_fetch_array($dataList,MYSQL_BOTH)) { $sql="update dailyistics set pageNum=pageNum+1 where visitDate='" . $setDate . "'"; mysql_query($sql); }else{ $sql="insert into dailyistics (pageNum,visitNum,visitDate) value(1,0,'" . $setDate . "')"; mysql_query($sql); } session_start(); if (!isset($_SESSION['userIP'])){ $_SESSION['userIP']=$this->getIP; $sql="update dailyistics set visitNum=visitNum+1 where visitDate='" . $setDate . "'"; mysql_query($sql); }else{ $_SESSION['userIP']=$this->getIP; } } function getIP() { global $_SERVER; if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } $onlineip = preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches); return $onlineipmatches[0]; } } ?> ※ 编辑: heavenbetula (61.228.78.185), 09/27/2014 18:45:47 ※ 编辑: heavenbetula (61.228.78.185), 09/27/2014 18:51:20
18F:→ tkdmaf: $_SERVER本来就是全域变数为何还要global? 09/27 23:04
19F:→ heavenbetula: 恩我也这麽觉得 ~ 09/28 08:01
20F:→ KawasumiMai: 把 $this->getIP; 全部改成 $this->getIP(); 09/28 16:20
感谢K大确实像你说的把 $this->getIP 改成 $this->getIP() 动作就正常了 我在想可能我这本书上使用if(!session_is_registered("userIP"))的旧语法来做判断时 只是在检查userIP是否有登入过,而与userIP有没有赋与值并无关系,所以造成 作者写成$this->getIP的笔误时,刚好又可以动作,所以让人以为有检查ip是否登入过 ※ 编辑: heavenbetula (61.228.76.105), 09/28/2014 21:39:36
21F:→ KawasumiMai: 跟语法旧不旧没什麽关系 09/28 21:53
22F:→ KawasumiMai: $this上没有getIP这个变数,存取回来可能为null 09/28 21:53
23F:→ KawasumiMai: 赋予$_SESSION[userIP]==null的boolean可能 09/28 21:54
24F:→ KawasumiMai: 刚好两种情况都发生。用isset去判断是一样的结果 09/28 21:55
25F:→ KawasumiMai: 只是你要会除错,留下那个class,留下function 09/28 21:56
26F:→ KawasumiMai: 删除额外的东西,直接呼叫,echo出值,f5看结果 09/28 21:56







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP