PHP 重定向不适用于联系表(消息正在发送中)

PHP redirect not working on contact form (message is sending)

我的联系表可以使用,但它不会将我重定向到我的感谢页面。在我将它转移到新主机之前它一直在工作。

<!-- Contact PHP Stuff -->
<?php

session_start();

require_once 'libs/phpmailer/PHPMailerAutoload.php';

$errors = [];

if(isset($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['message'])) {

    $fields = [
        'name'=> $_POST['name'],
        'email'=> $_POST['email'],
        'subject'=> $_POST['subject'],
        'message'=> $_POST['message']
    ];

    foreach($fields as $field => $data) {
        if(empty($data)) {
            $errors[] = 'The ' . $field . ' field is required'; 
        }
    }
    if(!empty($fields['name'])) {
        if (!preg_match("/^[a-zA-Z ]*$/",$fields['name'])) {
            $errors[] = "Name can only include letters A-Z";
        }
    }
    if(!empty($fields['email'])) {
        if (!filter_var($fields['email'], FILTER_VALIDATE_EMAIL)) {
            $errors[] = "Please enter a valid email address";
        }
    }

    if(empty($errors)) {

        $mail = new PHPMailer(); // create a new object
        $mail->IsHTML(true);
        $mail->Username = "contact@dhmltd.co.uk";
        $mail->Password = "*****";
        $mail->SetFrom($fields['email'], $fields['name']);
        $mail->Subject = $fields['subject'];
        $mail->Body = $fields['message'];
        $mail->AddAddress("admin@dhmltd.co.uk");

        if($mail->Send()) {
            header('Location: thanks');
            die();
        } else {
            $errors[] = "Sorry could not send message. Try again later";
        }

    }

} else {
    $errors[] = 'Something went wrong'; 
}

$_SESSION['errors'] = $errors;
$_SESSION['thanks'] = $thanks;
$_SESSION['fields'] = $fields;

header('Location: contact#contact-form');

?>

header('Location: thanks'); 将我重定向到 thanks.html 我以前的主机,但现在即使正在发送和传递消息也没有发生这种情况。

我在一个教程上找到了代码,但不记得一年多前是在哪里了。

使用前删除所有内容 header。 在使用 header()

之前你不能有任何输出

如果你添加

error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);

您可能会看到 'headers already sent' 错误。

或者您可以使用 exit() 显然修复了它。