我的世界雨林:PHP的$PHP_SELF使用问题

来源:百度文库 编辑:高考问答 时间:2024/04/29 16:30:24
在做留言分页时用了这个函数,当前为首页时IE的地址栏显示如下(目前在本地个人的微机测试):
http://localhost/guestbook/guestbook.php?offset=0
但在IE的地址栏中将offset=0改为offset=sdf(任意什么字符),按“转到“按钮时就会在页面上提示如下信息:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in d:\usr\www\html\guestbook\guestbook.php on line 120
并且留言内容不能显示!!这属于哪类问题?
这种情况在地址栏中输入特殊代码时网站是否会被攻击??
如何解决此类???感谢!!
除了屏蔽程序输出的错误的方法之外,能否在地址栏输入[虽然有这种习惯的人不多,但主要是防有人捣乱]不合要求的参数时,就转到首页[其它页也行]???

$PHP_SELF 表示当前的php文件
这是php的几个系统的变量 比如你的a.php文件在 /www/g/f/
那么如果你只是 echo $PHP_SELF 那么就会得到 /www/g/f/a.php
另外php这样系统函数还有不少 比如 $REMOTE_ADDR 表示获取客户端的ip
这些东西在 phpinfo()中都可以看到
注意这里这些字母都是大写的
你说的下面那个问题是由于那个offset变量的值影响到了 内部的sql语句
打个比方说 里面的代码是这样写的
$sql="select * from table"
if($offset) $sql=$sql."order by ".$offset; //如果offset有值那么就按照$offset的字段名排序
当offset为0时 用默认的排序
这里比如你的表中有一个name字段 你在超链接中可以这样下 ?offset=name
但是当人为的输入了 offset=asd的时候 满足$offset 不为空的条件 所以真个sql就变成了 select * from table order by asd
因为asd 字段在数据库中没有 所以这个时候就会出现sql执行的错误提示
当然这种提示会暴露出一些错误 这方便在调试的时候检查代码
但是也带来了一定的安全隐患 所以php代码在执行的时候你可以选择两种处理错误的的方式
一是:在函数前加上@符号可以完全屏蔽程序输出的错误
二是:使用or die 比如很常见的 在mysql的连接函数
mysql_connect("localhost","root","") or die("无法连接到数据库服务器")
所以你上面的问题就是只要你找到那个mysql_fetch_row(...)改为@mysql_fetch_row(...) 或者在后面加上 or die("所提供的查询结果不是一个有效的mysql返回结果")
我也是一个php爱好者 大家共同学习共同进步