PHP:isset()无效(假阴性)

Stu*_*ler 0 php validation isset

好的,我知道在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>
Run Code Online (Sandbox Code Playgroud)

我有以下代码

$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);
    }


}
Run Code Online (Sandbox Code Playgroud)

这在提交空白表格时会产生

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

另一种方法是检查这些元素是否为空(),但是当"hours"设置为0时,empty()将返回误报.

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

Der*_*ian 5

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

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