首页 > 解决方案 > 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.";
        }
    }
?>

任何帮助将不胜感激。

标签: phpforms

解决方案


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

推荐阅读