2013-11-26 137 views
0

我已经创建了一个网页,在完成表单之后,页面被重定向到自身以避免表单重新提交。但是,我想在页面重定向后显示确认消息。下面,我有我目前的代码。我需要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 = "[email protected]"; 
       $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--> 
+0

您可以创建新页面,并重定向页面上,即:创建success.php或东西,用头位置,你正在做 – Ayaz

+0

有关其他信息相同的方式重定向,你就不要用'头(”位置:http://c0mp.org')'后HTML代码。它会在你的页面显示警告。 –

回答

0

您可以将参数添加到您的重定向URL:

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

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

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

注:移动你POST代码放在页面顶部,您可能遇到拒绝重定向的问题,因为内容已经发送到浏览器。

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

符号:使用header()功能HTML代码后不正确,会显示在你的网页的警告。

0

否则,如果你只是想让服务器的内存提交状态,只需使用会话。

<?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 = "[email protected]"; 
      $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--> 
+0

唯一的问题是,回声没有被发送。它从来没有真正出现。 – Compressions

+0

@Compressions,因为您的重定向头已被发送。浏览器将在显示“您的消息已发送!”之前重定向。使用这个:header(“refresh:2; url = http://c0mp.org”); –