PHP isset()函数在表单验证时不起作用


php isset() function not working on form validation

我有以下验证,我对它的工作方式感到困惑。我正在对每个字段进行标准的isset()检查,并且我想为每个未设置的字段打印一条错误消息。然而,由于某些原因,它根本不适合我。

<?php 
  if (isset($_POST["submit"])) {
    //show hr on click
    $error_design = "<hr> <p id='error_msg'>Please Fix Below Errors: <p>";

    $user_name = $_POST["name"];
    $user_email = $_POST["email"];
    $user_age = $_POST["age"];
    $validation_errors = " ";
    $error_counter = null;
    if (isset($_POST["name"])) {
      $validation_errors .= "<li class='validation_errors'>Please input your name.</li>";
      $error_counter++;
    }
    if (isset($user_email)) {
      $validation_errors .= "<li class='validation_errors'>Please input your email.</li>";
      $error_counter++;
    }
    if (isset($user_age)) {
      $validation_errors .= "<li class='validation_errors'>Please input your age.</li>";
      $error_counter++;
    } elseif (intval($user_age) < 18) {
      $validation_errors .= "<li class='validation_errors'>You must be over 18 years old.</li>";
      $error_counter++;
    }

    if ($error_counter = null) {
      $validation_errors = "<li class='validation_success'>Message successfully sent!</li>";
    }
  }
?>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>SandBox</title>
  <link rel="stylesheet" type="text/css" href="css/style.css">
  <link rel="stylesheet" href="css/animate.css">
  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="js/script.js"></script>
</head>
<body>
  <header>
  </header>
  <form action="" method="post">
    <div class="input_group">
      <label for="name">Name</label>
      <input type="text" name="name">
    </div>
    <div class="input_group">
      <label for="email">eMail</label>
      <input type="email" name="email">
    </div>
    <div class="input_group">
      <label for="age">Age</label>
      <input type="text" name="age">
    </div>
    <input type="submit" value="Send" name="submit" id="submit">
    <?php echo $error_design; ?>
    <div>
      <ul>
        <?php echo $validation_errors; ?>
      </ul>
    </div>
  </form>

  <footer></footer>
</body>
</html>

这是因为你在这里使用了错误的函数。

isset()检查变量是否设置并且不是null,但是当您发送带有空字段的表单时,您将获得空字符串。在这种情况下,isset()会返回true

您必须使用empty()并检查字符串长度以确保存在

在您的情况下,您试图检查变量是否未设置,但在您的代码中,您实际上检查变量是否已设置,因此将每个isset()替换为if(!isset())