PHP: POST 当操作是页面本身时,请求丢失(?)。也 302 找到

PHP: POST request gets lost(?) when the action is the page itself. Also 302 Found

我的 add.php 上有一个简单的 HTML 表单,其中方法是 POST,操作是原始的 add.php

如果我提交表单,我可以看到 POST 请求已发送,但状态为 302 Found。另外,如果我尝试 var_dump($_POST),它是一个空数组。

但是,如果操作是 test.php,其中唯一的内容是 var_dump($_POST),它会起作用并且状态是 200 OK

我该如何解决这个问题?作业需要代码,因此我必须使用 add.php 作为表单操作。

<form action="add.php" method="post">
    <div class="addEntryPersonalData">
    <p>First Name:  <br>
        <input type="text" name="first_name" size="30"></p>
        <p>Last Name:   <br>
        <input type="text" name="last_name" size="30"></p>
        <p>Email:   <br>
        <input type="text" name="email" size="30"></p>
        <p>Headline:<br>
    </div>
    <input type="text" name="headline" size="75.7"></p>
    <p>Summary:<br>
    <textarea name="summary" rows="8" cols="70"></textarea>
    </p><p>
    <input type="submit" value="Add" name="submit">
    <input  type="submit" name="cancel" value="Cancel">
    </p>
</form>

如果我需要提供更多信息,请告诉我。

更新:add.php 的其余部分:

<?php
if (isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['headline'], $_POST['summary'])){
   if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
   /* Insert into SQL database using PDO */
   } 
   else {
        $_POST['invalid'] = 1;          //if the email address is invalid
        header("Location: add.php");
   }
}
elseif (isset($_POST['invalid'])){
    echo '<p>Invalid email address format!</p>';      //if the email is invalid
}
elseif (isset($_POST['submit'])){
    echo '<p>Please fill out every field!</p>';     //if fields are missing
    }
?>

我重构了它以使其更具可读性,我希望它足够了。

得到答案:

代码尝试验证电子邮件地址,即使字符串为空。这导致它进入 header() 函数,该函数擦除 $_POST 数组。