近日使用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;
}
?>
故障排除。