Contact.php发送电子邮件但不重定向

时间:2015-03-18 12:42:35

标签: php forms contact-form

我正在处理音乐计划网站的联系表格。

联系表格似乎正常。如果我输入每个字段,它会发送电子邮件(我在我的Gmail帐户上可以正常),如果我没有输入每个字段,它会给出错误消息。 但奇怪的是,在我点击发送后,我得到一个空白页面(地址:MySiteRoot / contact.php)并且它没有重定向。 如果我然后点击浏览器“返回”按钮,我会收到正确的“错误”消息,无论是错误还是发送的消息。

为什么不重定向?有什么想法吗?

我尝试过添加

exit();

之后

header('Location: /index.php');

但它没有做任何改变。

我在我网站的根文件夹上有index.php和联系人php。

这是我的CONTACT.PHP的代码

<?php

session_start();

require_once 'libs/phpmailer/PHPMailerAutoload.php';

$errors = [];

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

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

    foreach($fields as $field => $data) {
        if(empty($data)) {
            $errors[] = 'The ' . '<b>' . $field . '</b>' . ' field is required.';
        }
    }

    if(empty($errors)) {
        $m = new PHPMailer;

        $m -> isSMTP();
        $m -> SMTPAuth = true;

        /*$m -> SMTPDebug = 1;*/   

        $m -> Host = 'smtp.gmail.com';
        $m -> Username = '';  /* TOOK THEM OUT HERE ON THE POST ONLY */
        $m -> Password = '';  /* TOOK THEM OUT HERE ON THE POST ONLY */
        $m -> SMTPSecure = 'ssl';
        $m -> SMTPKeepAlive = true;
        $m -> Port = 465;

        $m -> isHTML(true);

        $m -> Subject = '4Elements Message';
        $m -> Body = 'From: ' . $fields['name'] . ' (' . $fields['email'] . ')<p>' . $fields['message'] . '</p>';

        $m -> FromName = '4Elements Contact';

        $m -> AddAddress('anatis@gmail.com', 'Anatis');

        if($m -> Send()) {
            $errors[] = 'Thanks! Your message was sent!';
            header('Location: /index.php');
        } else {
            $errors[] = 'Sorry, could not send email. Please try again later.';
        }
    } 

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

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

header('Location: /index.php');

在我开始的INDEX.PHP上:

<?php

session_start();

require_once 'security.php';

$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];

?>

<!DOCTYPE HTML>
... THEN COMES SOME HTML CONTENT

后来FORM:

<?php if(!empty($errors)): ?>
    <div class="panel">
        <ul><li><?php echo implode('</li><li>', $errors); ?></li></ul>
    </div> <!-- end of .panel -->
<?php endif; ?>

<form action="contact.php" method="post">
    <label>
        <input type="text" name="name" autocomplete="off" placeholder="Name" <?php echo isset($fields['name']) ? ' value="' . e($fields['name']) . '"' : ''?>>
    </label>

    <label>
        <input type="email" name="email" autocomplete="off" placeholder="Email" <?php echo isset($fields['email']) ? ' value="' . e($fields['email']) . '"' : ''?>>
    </label>

    <label>
        <textarea name="message" rows="10" placeholder="Message"><?php echo isset($fields['message']) ? e($fields['message']) : ''?></textarea>
    </label>

    <input id="submitbutton" type="submit" value="send">

    </form>

然后在index.php的末尾我还有:

<?php
    unset($_SESSION['errors']);
    unset($_SESSION['fields']);
?>

我在我的本地服务器上工作,MAMP运行PHP 5.6.2

有关正在发生的事情的任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

尝试删除标题('Location:/index.php');在m-&gt; Send()里面,让脚本末尾只有一个。 甚至在开头用$ errors = Array替换$ errors = []。

答案 1 :(得分:1)

您是否尝试过使用javascript而不是标题(&#39;位置:/index.php');

echo '<script>window.location.href="/index.php";</script>'

此外,您是否检查过任何警告或错误日志文件。如果您收到此类错误消息&#34;无法修改标题信息 - 已发送标题&#34;然后尝试此链接How to fix "Headers already sent" error in PHP

我希望它适合你。