想象一个来自不同输入类型/元素形式的$_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