php - PHP:成功提交后清除表单条目
问题描述
我有简单的一页联系表,其逻辑如下
- 如果用户点击发送按钮并发生错误,则显示错误并保留表单值
- 如果用户点击发送按钮并且一切正常,则显示成功消息并清除表单值
这是完整的代码。我正在$_POST = array();
尝试清除这些值,但似乎没有用。
<form id="contact_form" method="POST">
Name<br/><input type="text" name="name" value="<?php echo isset($_POST["name"]) ? $_POST["name"] : ''; ?>" required><br/>
Email<br/><input type="text" name="email" value="<?php echo isset($_POST["email"]) ? $_POST["email"] : ''; ?>" required><br/>
...
<input type="submit" value="Send"><input type="reset" value="Clear">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$email = $_POST['email'];
...
if (mail($recipient, $subject, $message, $headers) == TRUE) {
$_POST = array();
echo "Your msg has been sent.";
}
else {
echo "An error occurred while trying to send your message.";
}
}
?>
任何帮助将不胜感激。
解决方案
实际上,您在检查它是否正确之前正在使用发布数据,因此它每次都会显示数据。您可以将您的 php 代码放在表单之前,如果成功则设置一个标志,然后不要在输入值属性中打印任何内容。
<?php
$success = false;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$email = $_POST['email'];
...
if (mail($recipient, $subject, $message, $headers) == TRUE) {
$success = true;
echo "Your msg has been sent.";
}
else {
echo "An error occurred while trying to send your message.";
}
}
?>
<form id="contact_form" method="POST">
Name<br/><input type="text" name="name" value="<?php echo (!$success) ? $_POST["name"] : ""; ?>" required><br/>
Email<br/><input type="text" name="email" value="<?php echo isset($_POST["email"]) && (!$success) ? $_POST["email"] : ''; ?>" required><br/>
...
<input type="submit" value="Send"><input type="reset" value="Clear">
</form>
推荐阅读
- reactjs - 为什么 setState 只在函数式 setState 中打印出最终状态值?
- delphi - 使用 GET 时的 IdHTTP EIdHTTPProtocolException
- python - Pyspark Dataframe 复制列中先前的最大值(int 或 date)
- python - 安装python时出现问题
- python-3.x - 我开始为我的朋友做一个数学测验,但是 if 语句不起作用:(
- json - @typescript-eslint/member-ordering 不起作用
- postgresql - 将表从 AWS PostgreSQL 复制到 Redshift 的最佳方法
- javascript - Google Apps 脚本:YouTube 搜索不适用于位置参数
- node.js - Dialogflow 处理动态快速回复
- macros - 什么是宏@。来自 Julia,文档在哪里?