【发布时间】: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