2013-05-29 115 views
-1

我已成功將以下表單提交代碼整合到我的網站中,並且效果很好。不過,如果表單提交成功,我希望代碼將用戶重定向到一個頁面,如果失敗,則將代碼重定向到另一個頁面。我怎麼能適應下面的代碼來做到這一點?它真的開始讓我緊張起來! :-P如何在php表單提交後重定向到成功/失敗頁面?

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$enquiry = $_POST['enquiry']; 
$formcontent=" From: $name \n Phone: $phone \n Message: $enquiry"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You!"; 
?> 

編輯:

好,我已經改變了代碼:

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$enquiry = $_POST['enquiry']; 
$formcontent=" From: $name \n Phone: $phone \n Message: $enquiry"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
if(mail($recipient, $subject, $formcontent, $mailheader)){ 
header("Location: mailer-success.htm"); 
}else{ 
header("Location: mailer-fail.htm"); 
} 
exit; 
?> 

這工作但它從來就沒有到故障頁面。我猜這是因爲即使字段爲空也總是發送電子郵件。我有jQuery的驗證(我已禁用測試目的),但顯然只適用於啓用JavaScript的用戶。如果表單域包含數據,我怎樣才能更改代碼以僅顯示成功頁面?任何幫助表示讚賞。

+2

定義「成功」。如果你只是想知道電子​​郵件是否已發送,你應該用更有趣的東西來替換die(「Error!」)。 – Blazemonger

+0

而不是最後的'echo'只是使用輸出位置標題指向'成功頁面'或'錯誤頁面'。 – arkascha

+0

剛回到我的問題,我8投5中。我沒有的3人中,有一人被關閉,另外2人使用不同的解決方案修正了這些建議。在這兩個我修復myslef我更新瞭解決方案的原始帖子。你可以嗎? :-P – Chris

回答

6

重定向添加到頁面:成功時

// Test to see if variables are empty: 
if(!empty($name) && !empty($email) && !empty($phone) && !empty($enquiry)){ 
    // Test to see if the mail sends successfully: 
    if(mail($recipient, $subject, $formcontent, $mailheader)){ 
     header("Location: success.php"); 
    }else{ 
     header("Location: error.php"); 
    } 
}else{ 
    header("Location: back_to_form.php"); 
} 
+0

謝謝,這正是我所要求的!但事實證明,這不是我所需要的。我編輯了這個問題。如果你能看看我會很感謝 – Chris

+0

@Chris我更新了代碼看看。 –

1

添加

header("Location: successpage.html"); 

你的代碼的底部,並刪除echo "Thank you!";

2

郵件函數返回真/假/失敗。所以這是非常簡單的:

if (mail($recipient, $subject, $formcontent, $mailheader)) { 
    header('location: success.php'); 
} else { 
    header('location: fail.php'); 
} 
1

擺脫回聲,然後用頭:

header("Location: success.php"); 

如果失敗,重定向到error.php

header("Location: error.php"); 

如果你想轉到表單所在的頁面,但顯示錯誤或成功消息,請執行以下操作:

header("Location: original.php?status=error") 

或者在適當的情況下將錯誤更改爲成功,您可以使用$_GET['status']來確定表單是否失敗/成功。

0
 
if (failure) { 
    header("Location: success.php"); 
    exit; 
} else if (success) { 
    echo "thank you"; 
} 
+0

嗯......「如果失敗,請將標題重定向至成功。php「^^ :)必須是我認爲的複製/粘貼錯誤 –

1

而不是向客戶端發送一個重定向,從而導致另一個調用到Web服務器,我相信這樣做的更好的方式是使用PHP包括。

if (mail($recipient, $subject, $formcontent, $mailheader)) 
    include 'success.php'; 
else 
    include 'fail.php'; 
+0

這會導致頁面刷新問題重新提交POST請求嗎? – Drumbeg

相關問題