PHP: 检查 $_POST-Array 是否包含 empty/not 设置值?

PHP: Check if $_POST-Array contains empty/not set values?

想象一个 $_POST-Array 与 input-types/elements 不同的形式。我想遍历数组并检查用户是否填写了所有字段或从所有 select-下拉列表中选择了一个非默认选项。

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

我必须如何更改代码?

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

<?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>

你的函数 returns true 如果缺少元素,但你回显 empty element found 如果函数 return false

禁用表单 elements/options 提交表单时不会发送。从您的 <option> 中删除 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:“Boolean 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>

稍微shorter/more你的函数的性能版本(这个returns当一个空元素被发现时,不需要检查所有元素):

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