PHP: isset () 不工作(漏报)

PHP: isset () not working (false negatives)

好的,我知道其中一些问题已经在 SO 上了;但他们并没有真正解决我的问题。

为此(缩减)html 形式:

<!DOCTYPE html><html><head><title>test</title></head><body>
        <form method="post" autocomplete="on" action="application6.php">
            <p>
                <input  type="text" name="fullname" id="fullname" maxlength="50" size="30">
                <label for="fullname">*Full Name</label>
            </p>
            <p>
                <input  type="text" name="email" id="email" maxlength="50" size="30">
            </p>
            <p>
                <select name="hours" id="hours">
                    <option value="" disabled="disabled" selected="selected">*Hours</option>
                    <option value="0">0</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                </select>
            </p>
    </body>
</html>

我有以下代码

$error_array = array(
    " "
);

echo ("debug: ");
print_r($_POST);



$variables = array(
    'fullname',
    'email',
    'hours'
);

foreach ($variables as $variable_name) {

    if (isset($_POST[$variable_name])) {
        echo 'Variable: ' . $variable_name . ' is not set<br/>';
        array_push($error_array, " " . $variable_name);
    }


}

提交空白表单的结果是

debug: Array ( [fullname] => [email] => )

另一种方法是检查这些元素是否为 empty(),但是当 "hours" 设置为 0 时,empty() 会 return 误报。

为什么这些元素会错误地注册为已设置,什么方法可以成功测试不同类型的输入?

尝试确保修剪后的值不是空字符串并且变量存在

foreach ($variables as $variable_name) {

    if (isset($_POST[$variable_name]) && "" != trim($_POST[$variable_name]) ) {
        echo 'Variable: ' . $variable_name . ' is not set<br/>';
        array_push($error_array, " " . $variable_name);
    }
}

问题出在你的逻辑上,你检查是否设置了 $_POST[whatever],如果是,你然后输出 "Variable is NOT set" 这与你的 if 语句检查相反。尝试添加一个!在isset前面:

if (!isset($_POST[$variable_name])) {
    echo 'Variable: ' . $variable_name . ' is not set<br/>';
    array_push($error_array, " " . $variable_name);
}
if (isset($_POST[$variable_name])) {
    echo 'Variable: ' . $variable_name . ' is set!!<br/>';
} elseif(!isset($_POST[$variable_name])){
    array_push($error_array, " " . $variable_name);
} elseif( empty($_POST[$variable_name])){
    echo 'Variable: ' . $variable_name . ' is empty!!<br/>';
} else{
   var_dump($_POST[$variable_name])
}

您好,不需要检查是否已设置,因为它始终会被设置,您只需要检查这个

if( trim($_POST['key']) != '' ){

}

另外如果你真的需要使用isset

$post = array_filter( array_map('trim', $_POST), function($a){
      return $a != '';
});

这会将它们从 $post

中删除