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

时间:2015-06-30 19:04:02

标签: 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>

我有以下代码

$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] =&gt; [email] =&gt;)

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

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

4 个答案:

答案 0 :(得分:5)

问题出在你的逻辑中,你检查是否设置了$ _POST [whatever],如果是,则输出&#34;不设置变量&#34;这与你的陈述检查相反。尝试添加一个!在isset面前:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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])
}

答案 3 :(得分:0)

您好,无需检查是否设置,因为它始终设置为您只需要检查

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

}

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

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

这将从$ post

中删除它们