Php 是否在避免表单重新提交后显示确认消息?

Php 是否在避免表单重新提交后显示确认消息?,php,html,Php,Html,我已经创建了一个web页面,在您完成表单后,该页面将重定向到自身,以避免表单重新提交。但是,我想在页面重定向后显示一条确认消息。下面是我目前的代码。我需要echo语句在运行标头后显示在表单下方。我在某个地方读到,我应该在URL中附加一个$\u GET参数,但我不知道这意味着什么,也不知道如何做,因为我是PHP的新手 <form action="<?php $PHP_SELF ;?>" method="POST"> <p>Name: &l

我已经创建了一个web页面,在您完成表单后,该页面将重定向到自身,以避免表单重新提交。但是,我想在页面重定向后显示一条确认消息。下面是我目前的代码。我需要echo语句在运行标头后显示在表单下方。我在某个地方读到,我应该在URL中附加一个$\u GET参数,但我不知道这意味着什么,也不知道如何做,因为我是PHP的新手

    <form action="<?php $PHP_SELF ;?>" method="POST">
        <p>Name: <input type="text" name="name" placeholder="Name"></p>
        <p>Email: <input type="text" name="email" placeholder="Email"></p>
        <p>Subject: <input type="text" name="subject" placeholder="Subject"></p>
        <p>Message: </p>
        <p><textarea name="message"></textarea></p>
        <input type="submit" name="submit" value="Submit"></form>

        <!-- TO-DO: Add form validations -->

        <!-- Start PHP Code -->
        <?php
            if(isset($_POST['submit'])) {
                $from = $_POST['email'];
                $to = "comp@c0mp.org";
                $subject = $_POST['subject'];
                $name = $_POST['name'];
                $message = $_POST['message'];

                mail($to, $subject, "Name: " . $name . "\nMessage: " . $message, "From:" . $from);

                header('Location: http://c0mp.org');

                echo "Your message has been sent!";
            }
        ?>
        <!-- End PHP Code-->

您可以向重定向url添加参数:

header('Location: http://c0mp.org?status=success');
现在,您可以检查该参数并显示正确的消息:

if (isset($_GET['status']) && $_GET['status'] === "success"){
    echo "Your message has been sent!";
}

注意:如果将您的邮政编码移动到页面顶部,您可能会遇到问题,因为内容已发送到浏览器,所以它拒绝重定向。

实际上,您不需要重定向到其他页面。如果表单元素已经提交,您只需要一个隐藏表单元素的策略

看看这个示例代码。您可以检查发送的值。如果已发送,您将处理并显示您的邮件,否则您将显示表单。
你可以把它改成你需要的

<?php
if (isset($_POST['your_name'])) {
   echo 'Your name is: ' . $_POST['your_name'];
} else {
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Your name: <input type="text" name="your_name" /><br />
<input type="submit" value="Send">
</form>

<?php
}
?>  


否则,如果您只想让服务器存储提交状态的内存,只需使用会话即可

    <?php 
    session_start();
    if (isset($_POST["name"])){
       $_SESSION["submit"] = 1;
    }
    //Very beginning of the file
    ?>
    <!-- ..maybe something else here (html head meta title...) -->


    <?php if(isset($_SESSION["submit"])){ ?>
    <h3>You have already submitted</h3>
    <?php } ?>


    <form action="<?php $PHP_SELF ;?>" method="POST">
    <p>Name: <input type="text" name="name" placeholder="Name"></p>
    <p>Email: <input type="text" name="email" placeholder="Email"></p>
    <p>Subject: <input type="text" name="subject" placeholder="Subject"></p>
    <p>Message: </p>
    <p><textarea name="message"></textarea></p>
    <input type="submit" name="submit" value="Submit"></form>

    <!-- TO-DO: Add form validations -->

    <!-- Start PHP Code -->
    <?php
        if(isset($_POST['submit'])) {
            $from = $_POST['email'];
            $to = "comp@c0mp.org";
            $subject = $_POST['subject'];
            $name = $_POST['name'];
            $message = $_POST['message'];

            mail($to, $subject, "Name: " . $name . "\nMessage: " . $message, "From:" . $from);

            header('Location: http://c0mp.org');

            echo "Your message has been sent!";
        }
    ?>
    <!-- End PHP Code-->

您已经提交了

您可以创建新页面并在该页面上重定向,即:create success.php或其他内容并使用标题位置重定向它,就像您所做的一样。对于其他信息,您不能使用
header('location:http://c0mp.org)
在HTML代码之后。它将在您的页面中显示警告。唯一的问题是,没有发送回显。它实际上从未显示。@Compressions,因为您的重定向标头已发送。浏览器将在显示“您的邮件已发送!”之前重定向。使用这个:标题(“刷新:2;url=);