为什么在选择 none 个单选按钮时,代表单选按钮的键从 HTTP POST 方法的 $_POST 超全局数组中丢失?

Why the key representing radio buttons goes missing from the HTTP POST method's $_POST superglobal array when none of them are selected?

我编写了以下 PHP 代码:

<!DOCTYPE HTML>  
<html>
  <head>
  </head>
  <body>  

    <?php
      // define variables and set to empty values
      $name = $email = $gender = $comment = $website = "";

      if ($_SERVER["REQUEST_METHOD"] == "POST") {
        echo "<pre>";
        print_r($_POST);
        echo "</pre>";
        die;  
      }
    ?>

    <h2>PHP Form Validation Example</h2>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
      Name: <input type="text" name="name">
      <br><br>
      E-mail: <input type="text" name="email">
      <br><br>
      Website: <input type="text" name="website">
      <br><br>
      Comment: <textarea name="comment" rows="5" cols="40"></textarea>
      <br><br>
      Gender:
      <input type="radio" name="gender" value="female">Female
      <input type="radio" name="gender" value="male">Male
      <br><br>
      <input type="submit" name="submit" value="Submit">  
    </form>
  </body>
</html>

当我提交表单时没有在任何表单中输入数据或 selecting HTML 表单上存在的两个单选按钮中的任何一个,我得到以下结果:

Array
(
    [name] => 
    [email] => 
    [website] => 
    [comment] => 
    [submit] => Submit
)

在上面的结果中,我可以看到所有输入表单控件的名称,甚至代表文本区域的键也存在于 $_POST 数组中。上面 $_POST 数组输出中唯一缺少的预期内容是代表单选按钮的键 'gender'

这是我的疑惑。为什么它会从 $_POST 数组的输出中丢失?

当我填写表单控件时,select任何单选按钮都工作正常,没有任何问题。

是否有任何其他类似的 HTML 表单控件,其行为类似于我编写的上述代码中的单选按钮?

请有人消除我的疑问并向我解释这种行为背后的原因。

谢谢。

因为当您不select无线电输入时,不会向服务器发送任何数据。 如MDN所示:

Note: If no radio button is selected when the form is submitted, there is no value submitted to the server to represent the unselected state (e.g., value=unselected); the value is not submitted to the server at all.

Source