PHP:检查$_POST-Array是否包含空值/未设置值



想象一个来自不同输入类型/元素形式的$_POST-Array。我想迭代数组,检查用户是否填写了所有字段,或者从所有选择下拉列表中选择了一个非默认选项。

在下面的代码中,我尝试使用函数postContainsEmptyValues(),但这不适用于选择字段(编辑:适用于文本输入(。

我必须如何更改代码?

(编辑:根据Brombers提示更新代码(删除禁用((

<?php
if (isset($_POST["btSubmit"])) {
if (postContainsEmptyValues()) {
echo "empty form element detected";
} else {
echo "all form-fields have been filled";
}
}
function postContainsEmptyValues()
{
$emptyElementDetected = false;
foreach ($_POST as $element) {
if ($element == "" || !isset($element)) {
$emptyElementDetected = true;
}
return $emptyElementDetected;
}
}
?>
<form action="<?php echo $_SERVER["SCRIPT_NAME"]; ?>" method="POST">
<select name="selectBox1">
<option value="" selected>-- choose one --</option>
<option value="a">choose a</option>
<option value="b">choose b</option>
</select>
<select name="selectBox2">
<option value="" selected>-- choose one --</option>
<option value="x">choose x</option>
<option value="y">choose y</option>
</select>
<input type="text" name="tfText" value="">
<input type="submit" name="btSubmit">
</form>

提交表单时不会发送禁用的表单元素/选项。从<option>s:中删除disabled属性

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
<select name="selectBox1">
<option value="" selected>-- choose one --</option>
<option value="a">choose a</option>
<option value="b">choose b</option>
</select>
<select name="selectBox2">
<option value="" selected>-- choose one --</option>
<option value="x">choose x</option>
<option value="y">choose y</option>
</select>
<input type="text" name="tfText" value="">
<input type="submit" name="btSubmit">
</form>

发件人https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled:">布尔禁用属性(如果存在(会使元素不可变、不可聚焦,甚至与表单一起提交。">

编辑:您在foreach循环中返回,因此只检查第一项。将return移出循环。完整的工作代码:

<?php
if(isset($_POST['btSubmit'])) { 
if (postContainsEmptyValues()) {
echo "empty form element detected";
}
}
function postContainsEmptyValues()
{
$emptyElementDetected = false;
foreach ($_POST as $element) {
if ($element == "" || !isset($element)) {
$emptyElementDetected = true;
}
}
return $emptyElementDetected;
}
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
<select name="selectBox1">
<option value="" selected>-- choose one --</option>
<option value="a">choose a</option>
<option value="b">choose b</option>
</select>
<select name="selectBox2">
<option value="" selected>-- choose one --</option>
<option value="x">choose x</option>
<option value="y">choose y</option>
</select>
<input type="text" name="tfText" value="">
<input type="submit" name="btSubmit">
</form>

函数的一个稍短/性能更高的版本(当发现一个空元素时,它会立即返回,无需检查所有元素(:

function postContainsEmptyValues()
{
foreach ($_POST as $element) {
if (empty($element)) {
return true;
}
}
return false;
}

如果缺少元素,函数将返回true,但如果函数返回false,则返回empty element found

最新更新