2011-05-06 168 views
5

我最近(有一點幫助)將這種簡單的表單寫入電子郵件腳本。它的工作原理,唯一的問題是它運行時重定向到包含的php腳本。有沒有人有關於如何阻止這種情況發生的想法,而只是在原始頁面上顯示感謝信?防止表單提交重定向

的index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Megaform</title> 
</head> 

<body> 
    <?php include 'form.php' ?> 
</body> 
</html> 

form.php的

<form name="email" method="post" action="email.php"> 
    <p> 
    <label for="name">Full Name</label> 
    <input type="text" name="name" id="name"> 
    </p> 
    <p> 
    <label for="email">Email Address</label> 
    <input type="text" name="email" id="email"> 
    </p> 
    <p> 
    <label for="phone">Phone Number</label> 
    <input type="text" name="phone" id="phone"> 
    </p> 
    <p> 
    <label for="subject">Subject</label> 
    <input type="text" name="subject" id="subject"> 
    </p> 
    <p> 
    <label for="message">Message<br> 
    </label> 
    <textarea name="message" id="message" cols="45" rows="5"></textarea> 
    </p> 
    <p><input type="submit" name="send" id="send" value="Submit"><input type="reset" name="send" id="send" value="Reset"> 
    </p> 
</form> 

email.php

<?php 

// Get the Variables 
    $name = $_POST['name']; 
    $visitor_email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $subject = $_POST['subject']; 
    $message = $_POST['message']; 


// Validate against spammers 
function IsInjected($str) 
{ 
    $injections = array('(\n+)', 
      '(\r+)', 
      '(\t+)', 
      '(%0A+)', 
      '(%0D+)', 
      '(%08+)', 
      '(%09+)' 
      ); 

    $inject = join('|', $injections); 
    $inject = "/$inject/i"; 

    if(preg_match($inject,$str)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

if(IsInjected($visitor_email)) 
{ 
    echo "Bad email value!"; 
    exit; 
} 


// Compose the Email 
    $email_from = '[email protected]'; // Set a valid email address that the form can use 

    $email_subject = "New Form submission - $subject"; // Change the message subject here 

    $email_body = "You have received a new message from $name ($phone) .\n Here is the message:\n $message"; 


// Send The Email 
    $to = "[email protected]"; // Set a valid email address to send the form to 

    $headers = "From: $email_from \r\n"; 

    $headers .= "Reply-To: $visitor_email \r\n"; 

    mail($to,$email_subject,$email_body,$headers); 

?> 
<p>Thankyou for your email.</p> 

回答

1

您需要設置形式定位到文件itselfe。

<form name="email" method="post" action="form.php"> 

幷包含您的代碼從email.php那裏。

if ($_POST['email']) { 
    ... code from email.php ... 
    ... and success message ... 
} 

只有在表單被髮送(並設置了電子郵件)時纔會執行此部分。

2

改變你的表單標籤說:

<form name="email" method="post" action="index.php"> 

,改變你的指數PHP說:

<body> 
<?php 
    if (isset($_POST['email'])) { 
     include 'email.php'; 
    } else { 
     include 'form.php'; 
    } 
?> 
</body> 

因此,如果表單被提交,發送電子郵件,否則,顯示窗體。

1

你可以回重定向直接從form.php的

將這個在form.php的

header("url: index.php"); 

甚至結束:

header("url: index.php?sent=true"); 

而且在index.php中你可以有

if($_GET['sent']){ 
    echo "Message Sent."; 
}