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
中删除
好的,我知道其中一些问题已经在 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
中删除