本文导读:
近日使用PHP搭建站点,PHP的功能很强大,其中有一点主要是函数多,我接触得不多,所以对于PHP的函数研究得也不是很多。但今天碰到的一个intval函数引起的问题,花了一番功夫才查找到原因,很有意义,于是跟大家分享一下。
近日使用PHP搭建站点,PHP的功能很强大,其中有一点主要是函数多,我接触得不多,所以对于PHP的函数研究得也不是很多。但今天碰到的一个intval函数引起的问题,花了一番功夫才查找到原因,很有意义,于是跟大家分享一下。
我的讲述问题的方法是,先说明intval函数的用法,再列出PHP程序出错的问题,最后是讲述解决问题的过程及解决方法。
一、intval函数的用法
网上搜索,很容易得到,现在附上用法及解释。
php中intval()函数
将给定变量转换成整型变量。变量不能是array和object格式
intintval(mixedvar[,intbase])第二个参数只有变量是字符串的时候才有用
var可以是任何标量类型。intval()不能用于array或object。
除非var参数是字符串,否则intval()的base参数不会有效果。
例子:<?php
intval(42,8);//=>34
intval(42,8);//=>42!
?>
说明:当第一个参数为字符串时,第二个参数是指定第一个参数的进制,比如intval("12",5)就是把“12”当成5进制的数,然后把这个5进制的数转换成10进制整数,并返回。例:
intval("12",5)=7;(5进制的12=10进制7)
intval("1011",2)=11;(2进制的1011=10进制11)
应用到PHP中一般的用法是把字符串转换成数值,即intval("数值变量"),例:intval("92"),echo输出该值的结果是92。
二、PHP程序故障
<?php
$catid=intval($_REQUEST["sercatid"]);
if($catid==""){
$catidsear="";
}else{
$catidsear="andpctdaclass=".$catid;
}
?>
变量sercatid由以下的表单提交
<selectname="sercatid"><optionvalue="">AllCategories</option>
程序功能是:判断表单提交是AllCategories的话,程序则提交空值给上面的PHP处理程序,变量catid为空值,则给变量$catidsear赋空值。
但程序的运行结果是,$catidsear="andpctdaclass=".$catid;
三、原因分析
根据PHP程序运行结果判断
if语句判断的($catid=="")并非为空,所以执行了ELSE语句。可是表单提交的是空值呀。
再仔细检查程序,发现
$catid=intval($_REQUEST["sercatid"]);这一句程序里使用了intval函数,为了证明问题所在,所以输出该值试试
<?php
echointval($_REQUEST["sercatid"]);
?>
竟然发现输出的结果是0。
所以故障就在于intval对于空值的处理是变成数字0了。所以IF的判断语句执行了ELSE。解决方法不使用intval函数,或者修改IF语句。如下:
<?php
$catid=intval($_REQUEST["sercatid"]);
if($catid==0){
$catidsear="";
}else{
$catidsear="andpctdaclass=".$catid;
}
?>
故障排除。