php isset()函数无法处理表单验证

时间:2015-09-13 00:36:42

标签: php

我有以下验证,我对它的工作方式感到困惑。我正在对每个字段执行标准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>

2 个答案:

答案 0 :(得分:4)

那是因为你在这里使用了错误的功能。

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

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

答案 1 :(得分:0)

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