我是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并说“数量”为空。
答案 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 = '';
}