2013-05-29 78 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

相关问题