!is_null()无法按预期工作

Joe*_*ssi 1 php post isnull

dispatch_address_postcode

不是强制性的,即使它是空白的,它仍然会运行:

if (!is_null($_POST['personal_info_first_name']) && 
    !is_null($_POST['personal_info_surname']) && 
    !is_null($_POST['personal_info_email']) && 
    !is_null($_POST['personal_info_telephone']) && 
    !is_null($_POST['dispatch_address_country']) && 
    !is_null($_POST['dispatch_address_first_name']) &&
    !is_null($_POST['dispatch_address_surname']) && 
    !is_null($_POST['dispatch_address_address']) && 
    !is_null($_POST['dispatch_address_town']) && 
    !is_null($_POST['dispatch_address_postcode']) && 
    !is_null($_POST['dispatch_address_county']) && 
    (   ($_POST['payment_method'] == "Pay by credit card.") ||
        (
            ($_POST['payment_method'] == "Pay by new credit card.") && 
            !is_null($_POST['card_number']) && 
            !is_null($_POST['expiration_date']) && 
            !is_null($_POST['security_code'])
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

Nav*_*arr 8

看起来您正在尝试确保提交所有发布变量.你想要帮忙吗?

使用!empty()可能不是您特定问题的答案,但它肯定有助于您尝试做的事情.

如果没有设置$ _POST键,如果它是一个空数组,或者即使它是一个空字符串,则empty()返回TRUE,因此使用!empty()是确保用户填写信息的好方法.


dec*_*eze 8

" dispatch_address_postcode不是强制性的,即使它是空白的,它仍会运行......"

再看看那句话.如果该字段不是必需的,那么如果该字段为空,则代码运行是完全可以的.如果字段不是必填字段,请不要将其作为必填字段进行测试.

但真正的问题是,is_null只测试变量是否为null.POST值永远不会null,如果它们是空的,它们将是''(一个空字符串).您的所有!is_null测试将始终如此true,如果未设置变量(您不希望发生这种情况),您将收到警告.更合适的测试!empty.

如果值看起来有效,那么更合适的测试将包括测试(电子邮件看起来像电子邮件地址,电话中至少有x位数吗?).您还应该遍历字段以使您的代码更具可读性,无限的嵌套和链接if条件不值得一看.

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
Run Code Online (Sandbox Code Playgroud)