程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> intval函數的用法及intval函數引起PHP程序故障一例

intval函數的用法及intval函數引起PHP程序故障一例

編輯:PHP基礎知識
 

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

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved