Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php表单提交后如何重定向到成功/失败页面?_Php - Fatal编程技术网

php表单提交后如何重定向到成功/失败页面?

php表单提交后如何重定向到成功/失败页面?,php,Php,我已经成功地将以下表单提交代码集成到我的站点中,效果非常好。但是,如果表单提交成功,我希望代码将用户重定向到一个页面,如果表单提交失败,则重定向到另一个页面。我如何调整以下代码来实现这一点?我真的开始紧张起来了-P <?php $name = $_POST['name']; $email = $_POST['email']; $phone = $_POST['phone']; $enquiry = $_POST['enquiry']; $formcontent=" From: $name

我已经成功地将以下表单提交代码集成到我的站点中,效果非常好。但是,如果表单提交成功,我希望代码将用户重定向到一个页面,如果表单提交失败,则重定向到另一个页面。我如何调整以下代码来实现这一点?我真的开始紧张起来了-P

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$enquiry = $_POST['enquiry'];
$formcontent=" From: $name \n Phone: $phone \n Message: $enquiry";
$recipient = "email@email.co.uk";
$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@email.co.uk";
$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的用户。如果表单字段包含数据,如何修改代码以仅显示成功页面?感谢您的帮助。

添加

header("Location: successpage.html");

到您的代码底部并删除echo谢谢

向页面添加重定向:

// 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");
}

邮件函数在成功/失败时返回true/false。所以很简单:

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

清除回显,然后使用标题:

header("Location: success.php");
如果失败,请重定向到error.php

header("Location: error.php");
如果要转到表单所在的页面,但显示错误或成功消息,请执行以下操作:

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

或者将error更改为success(如果合适),然后可以使用$\u GET['status']确定表单是否失败/成功。

而不是向客户端发送重定向,从而导致对web服务器的另一个调用,我相信更好的方法是使用PHP include

if (failure) { header("Location: success.php"); exit; } else if (success) { echo "thank you"; }
if (mail($recipient, $subject, $formcontent, $mailheader))
    include 'success.php';
else
    include 'fail.php';

定义成功。如果您只想知道电子邮件是否已发送,则应替换dieError!还有一些更有趣的内容。使用指向“成功页面”或“错误页面”的位置标题,而不是最终的回音。我刚刚回顾了我的问题,在8个问题中,我投了5个。在我没有提到的三个问题中,有一个是关闭的,另外两个是我用不同的解决方案解决的。在这两个问题上,我修复了myslef,并用解决方案更新了原始帖子。你同意吗-汉克斯,这正是我想要的!然而,事实证明这不是我需要的lol。我已经编辑了这个问题。如果你能看一看,我会的grateful@Chris我更新了代码,看看。嗯。如果失败,头重定向到success.php^^:我想一定是复制/粘贴错误。这会导致页面刷新重新提交POST请求吗?