【问题标题】:PHP: POST request gets lost(?) when the action is the page itself. Also 302 FoundPHP:当操作是页面本身时,POST 请求会丢失(?)。也找到了 302
【发布时间】:2020-11-04 07:08:16
【问题描述】:

我的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
    }
?>

我对其进行了重构,使其更具可读性,我希望它已经足够了。

【问题讨论】:

  • add.php 中剩下的代码是什么?您只展示了表单本身,听起来这比展示的要多。
  • @TimBrownlaw 我用必要的代码更新了问题。你能发现问题吗? (我知道它很乱而且不优雅,但无论如何这门课都是针对 javascript 的,而不是 PHP 的)。
  • 好的,所以我在 HTML 表单代码之前有你的 PHP 代码,这样 PHP 就可以处理提交表单时发生的事情......而且我没有收到您的 302 错误,而是您的 $ _POST['invalid'] 将永远不可见,因为您正在重定向并且 $_POST 将被重置。您需要移动您对 $_POST 的测试...并首先测试 $_POST['submit']。
  • 您需要仔细考虑这些步骤...因此,如果尚未提交表单,则什么也不做,只需显示表单...因此,一旦您检测到表单已提交,请检查输入并显示所需的错误消息...如果一切正常,将其保存到数据库中。
  • @TimBrownlaw OMG 谢谢!!我想通了:PHP 代码在 HTML 之前,一切都很好,除了某些部分没有填写,它还尝试验证电子邮件。由于它无效,因此它通过 header() 函数重定向,从而清除了 $_POST。

标签: php html http post http-status-code-302


【解决方案1】:

得到答案:

代码尝试验证电子邮件地址,即使字符串为空。这会将其引向 header() 函数,该函数会擦除 $_POST 数组。

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2015-08-20
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2019-11-02
    相关资源
    最近更新 更多