2013-04-03 111 views
1

當試圖驗證一個字段時,它似乎不起作用。當$postcode不是null時,我只需要執行!is_numeric。我有客戶端驗證,但我想確保我也有服務器端驗證。PHP表單驗證的值不爲空

代碼:

else if(!is_null($postcode) && !is_numeric($postcode)) 
{ 
    $msg_to_user = '<br /><br /><h4><font color="FF0000">Postcode must be a numeric value.</font></h4>'; 
} 
+0

你從服務器獲得什麼樣的錯誤呢? – Ranjith

+0

您發佈的代碼很好,除了第二行末尾沒有分號。就像@Ranjith說的那樣,你會得到什麼錯誤? – Seer

回答

2

假設$postcode來自任一個或$POST$GET,它始終是一個字符串。 !is_null()會,因此是假的,不管:

php> var_dump(is_null("")) 
#=> bool(false) 

你可以恢復使用empty(),這是比較寬鬆的。但是,當涉及到這些檢查時,PHP是完全不一致和奇怪的。例如,empty()也將返回FALSE。對。

php> $postcode = ""; 
php> var_dump(empty($postcode)) 
#=> bool(true) 
php> $postcode = 0; 
php>var_dump(empty($postcode)) 
#=> bool(true) 

更好的方法,就是做某種「duck-typing」。在你的情況下:當它可以轉換爲數值時,就這樣做並使用它。然後將其留給語言以確定它認爲「數字 - 伊什」足以進行轉換。

php> var_dump((int) "") 
int(0) 
php> var_dump((int) "13") 
int(13) 

所以:

else if(($postcode = (int) $postcode) && ($postcode > 0)) { 
} 

而在去年,題外話:警告對您的業務假設的謹慎:郵政編碼並不總是數值。是的,在美國大部分都是。但也有越來越多的國家在那裏(說這是一個歐盟公民誰上臺方式過於頻繁有關的網站,假定每個人都是普通美國公民)

2

也許你想在strlen的使用空()函數()函數,因爲is_null()檢查NULL值。如果$ postcode是==「」它不是NULL。

http://php.net/manual/en/function.is-null.php 

比你可以使用

else if(!empty($postcode) && !is_numeric($postcode)) { 

else if(strlen($postcode) > 0 && !is_numeric($postcode)) { 

else if($postcode != "" && !is_numeric($postcode)) { 

爲鏈接指定的,如果你想使用is_null,是更好地使用$ postcode!== NULL。 快得多

0

試試這個

else if(!empty($postcode) && !is_numeric($postcode)) { 
    $msg_to_user = '<br /><br /><h4><font color="FF0000">Postcode must be a numeric value.</font></h4>'; 
} 

希望這有助於