PHP:成功提交后清除表单条目

PHP:成功提交后清除表单条目,php,forms,Php,Forms,我有一个简单的一页的联系表,逻辑如下 如果用户点击发送按钮并出现错误,则显示错误并保留表单值 如果用户点击发送按钮,一切正常,则显示成功消息并清除表单值 这是完整的代码。我使用的是$\u POST=array()尝试清除值,但似乎不起作用 <form id="contact_form" method="POST"> Name<br/><input type="text" name="name" value="<?php echo isset($_

我有一个简单的一页的联系表,逻辑如下

  • 如果用户点击发送按钮并出现错误,则显示错误并保留表单值
  • 如果用户点击发送按钮,一切正常,则显示成功消息并清除表单值
这是完整的代码。我使用的是
$\u 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.";
        }
    }
?>

名称

非常感谢您的帮助。

事实上,在检查post数据是否正确之前,您正在使用post数据,因此每次都会显示数据。您可以将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>


Name
实际上,在检查post数据是否正确之前,您正在使用post数据,因此每次都会显示数据。您可以将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>


Name
我正在使用$\u POST=array();。。。不应明确更改服务器变量。。但是,不清楚您试图询问的是什么如果电子邮件发送成功,请清除表单。这将阻止显示“成功”消息。将$\u POST分配给另一个变量,然后检查它。。。如果已发送,请不要为此使用会话。。。他为什么要这么做@M.AlimI正在使用$_POST=array();。。。不应明确更改服务器变量。。但是,不清楚您试图询问的是什么如果电子邮件发送成功,请清除表单。这将阻止显示“成功”消息。将$\u POST分配给另一个变量,然后检查它。。。如果已发送,请不要为此使用会话。。。他为什么要这么做@阿利姆