好的,我知道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()将返回误报。
为什么这些元素错误地注册为已设置,哪些方法可以成功测试不同类型的输入?
答案 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
中删除它们