如何检查文本变量是否为null,false或小于0?

时间:2019-09-04 21:19:18

标签: php if-statement filter-input

我是PHP的新手,但是遇到了问题。我有一个提交的PHP表单。该分配指示我必须使用filter_input检查值是否为null。但是,当我使用if / else语句时,即使我输入了单词,它也会在第二个NULL选项上停止。我使用var_dump检查,并且变量为false。为什么虚假消息没有出现?

$product_name = filter_input(INPUT_POST, 'product_name');
$quantity = filter_input(INPUT_POST, 'quantity',FILTER_VALIDATE_INT);
$unit_price = filter_input(INPUT_POST, 'unit_price',FILTER_VALIDATE_INT);
var_dump($quantity);

//validate product_name
if ( $product_name == NULL) {
    $error_message = 'Please enter a valid product name'; 
//validate quantity
} else if ( $quantity == NULL)  {
    $error_message = 'Quantity is null'; 
} else if ( $quantity == FALSE ) {
    $error_message = 'Quantity must be a valid number.'; 
} else if ( $quantity <= 0 ) {
    $error_message = 'Quantity must be greater than zero.'; 
//unit_price
} else if ( $unit_price == NULL ) {
    $error_message = 'Unit Price is null';
} else if ( $unit_price <= 0 ) {
    $error_message = 'Unit Price must be greater than zero.';
// set error message to empty string if no invalid entries
} else {
    $error_message = ''; 
}

// if an error message exists, go to the purchase2.php page
if ($error_message != '') {
    include('purchase2.php');
    exit(); 
}

我期望FALSE消息会出现,但它会一直停在NULL并说“数量”为空。

1 个答案:

答案 0 :(得分:1)

默认情况下,如果未设置键,filter_input将返回null,如果过滤器失败,则返回false。除非有人在提交表单代码之前对表单代码进行了操作,或者您忘记了/错误地输入了其中一个输入,否则这些键将始终存在,因此任何过滤器都不应返回null。

但是,由于null是一个伪造的值,因此您可以以相同的方式评估这两种可能性,而实际上是哪一种都不重要。

如果由于某种原因$ _POST缺少该键,并且filter_input返回null,则他们没有输入有效值,并且如果 not 缺少$ _POST,但它无效,并且filter_input返回false,则他们没有输入有效值。无论哪种方式,他们都应该收到相同的消息。

if (!$product_name) {
    $error_message = 'Please enter a valid product name';
} else if ($quantity === null || $quantity === false) {
    $error_message = 'Quantity must be a valid number.';
} else if ($quantity <= 0 ) {
    $error_message = 'Quantity must be greater than zero.';
} else if ($unit_price === null || $unit_price === false) {
    $error_message = 'Unit Price must be a valid number';
} else if ($unit_price <= 0 ) {
    $error_message = 'Unit Price must be greater than zero.';
} else {
    $error_message = '';
}