避免重新提交表格后显示确认消息?

时间:2013-11-26 19:10:25

标签: php html

我创建了一个网页,在您完成表单后,页面将重定向到自身以避免重新提交表单。但是,我想在重定向页面后显示确认消息。下面,我有我目前的代码。我需要在标题运行后显示在表单下方的echo语句。我在某处读到了我应该在URL中附加一个$ _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-->

3 个答案:

答案 0 :(得分:0)

您可以在重定向网址中添加参数:

header('Location: http://c0mp.org?status=success');

现在您可以检查该参数并显示正确的消息:

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

注意:将您的POST代码移到页面顶部,您可能会遇到因拒绝重定向而导致内容已经发送到浏览器的问题。

答案 1 :(得分:0)

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

看看这个示例代码。您检查发送的值。如果已发送,您将处理它并显示您的消息,否则您将显示该表单 您可以将其更改为您需要的。

<?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
}
?>  

表示法:HTML代码不正确后使用header()功能,并会在您的网页中显示警告。

答案 2 :(得分:0)

否则,如果您只想让服务器在内存中提交状态,只需使用session。

    <?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-->