is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id');
即使pid的值是整數,我仍然會收到無效的產品ID消息。爲什麼?這個簡單的PHP代碼有什麼問題?
is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id');
即使pid的值是整數,我仍然會收到無效的產品ID消息。爲什麼?這個簡單的PHP代碼有什麼問題?
像manual這樣說:要測試一個變量是一個數字還是一個數字字符串(例如表單輸入,它總是一個字符串),您必須使用is_numeric()。
編輯:雖然這是我的答案暗示在這裏,但我會更具體:$_GET
的內容是字符串,所以is_int
調用將始終返回false。如果您真的想在此驗證的是某個字符串的內容代表
整數
數字,您可以使用致電is_numeric
。
「...以驗證...特定字符串的內容代表整數,您可以使用對is_numeric的調用。」不可以。您可以使用_is_numeric()_僅驗證它是一個數字,而不是一個整數。見克里斯的答案。 – GZipp 2011-01-08 20:24:16
$_GET[]
總是返回字符串,所以is_int()
總是計算爲false
。改爲嘗試is_numeric()
。
$_GET
中的任何內容都是字符串,並且is_int("2")
返回false
。
$ _GET數組中的值通常是字符串類型,但有時也是類型數組。
使用ctype_digit()檢查一個字符串是否完全是數字字符。可選地,首先修剪()字符串。如果你想接受有時被數值解釋的各種格式的字符串,比如小數點,科學記數法,十六進制字符串等,只能使用is_numeric()...
你可以在例子中看到:`var_dump(is_int (「23」));`打印`布爾(假)`。並實際回答你的問題:你的代碼沒有問題。只有(imo)是你不應該用這種方式使用三元運算符。如果您實際分配了一個值,您應該只使用它(再次:imo)。 – 2011-01-08 20:04:36
不是答案,只是建議:不要使用三元運算符`::`來控制流程(執行一條語句或另一條語句)。它的意思是用作表達式,例如`x =(y> 5?'high':'low')`。在這種情況下,使用`if(...){...} else {...}`。 – 2011-01-08 20:05:36