2014-04-04 91 views
3

以下代碼很有效,直到inQuantity接收到零「0」。在收到一個零後,它將評估它爲空,並將其置入空值而不是「0」。如果輸入「0.00」,則評估爲非空。php三元運算符在輸入0時失敗

$_POST['inQuantity'] = (!empty($_POST['inQuantity'])) ? $_POST['inQuantity'] : NULL; 

下面的代碼產生相同的結果

if (empty($_POST['inQuantity'])) { 
     $state = "empty"; 
    } else { 
     $state = "full"; 
    } 

時inQuantity爲 「0」 $狀態的輸出是 「空」

任何人都知道這是爲什麼?

+1

這是不是一個「失敗「根本就是,php(以及大多數其他語言)如何解釋」0「值。這是有據可查的行爲。您可能希望將其作爲條件:'(isset($ _ POST ['inQuantity']))' – arkascha

+0

請注意,所提及的副本提及任何變量,而這是關於從GPC獲取的值;區別在於不需要的'empty()'行爲僅限於「0」。 –

+0

非常感謝,新手在這裏,對我來說仍然是一個錯誤。 – user2793447

回答

5

你不應該在這種情況下使用空的,因爲它是在這種情況下返回true的empty標準行爲:

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
$var; (a variable declared, but without a value) 

嘗試使用isset()函數:

$_POST['inQuantity'] = (isset($_POST['inQuantity'])) ? (float) $_POST['inQuantity'] : NULL; 
1

因爲empty('0')收益率true你必須對你認爲空洞的東西更具體;例如:

if (isset($_POST['inQuantity'])) { 
    // The 'inQuantity' parameter was passed via $_POST 
} else { 
    // Not passed 
} 

你可以考慮空字符串是,好了,空:

if (isset($_POST['inQuantity']) && strlen($_POST['inQuantity'])) { 
    // The 'inQuantity' parameter was passed via $_POST 
    // and contains at least one character (worst case, it's an array) 
} else { 
    // Not passed or empty 
} 

另一種方法是使用輸入過濾:

$quantity = filter_input(INPUT_POST, 'inQuantity', FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE); 

if ($quantity !== null) { 
    // value was passed and is a valid floating point value 
}