【问题标题】:Will not redirect after submitting form - Form works, still get error提交表单后不会重定向 - 表单有效,仍然出现错误
【发布时间】:2013-08-16 18:51:29
【问题描述】:

我已经写了这个表格,它工作得很好。它可以很好地发送电子邮件。但发送后,它会出错。所以提交表单的人认为它坏了,但它实际上发送了表单。我要做的就是在邮件发送后将表单提交到thanks.asp 后重定向。

任何帮助表示赞赏。

<?php

    $name = trim($_POST['name']);
    $company = $_POST['company'];
    $email = $_POST['email'];
    $comments = $_POST['comments'];

    $site_owners_email = 'support@macnx.com'; // Replace this with your own email address
    $site_owners_name = 'Landin'; // replace with your name

    if (strlen($name) < 2) {
        $error['name'] = "Please enter your name";  
    }

    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Please enter a valid email address"; 
    }

    if (strlen($comments) < 3) {
        $error['comments'] = "Please leave a comment.";
    }

    if (!$error) {

        require_once('phpMailer/class.phpmailer.php');
        $mail = new PHPMailer();

        $mail->From = $email;
        $mail->FromName = $name;
        $mail->Subject = "Website Contact Form";
        $mail->AddAddress($site_owners_email, $site_owners_name);
        $mail->Body = $email . $company . $comments;

        // GMAIL STUFF

        $mail->Mailer = "smtp";
        $mail->Host = "smtp.gmail.com";
        $mail->Port = 587;
        $mail->SMTPSecure = "tls"; 

        $mail->SMTPAuth = true; // turn on SMTP authentication
        $mail->Username = "inquiry@getgearhead.com"; // SMTP username
        $mail->Password = "..."; // SMTP password

        $mail->Send();

        header("Location: http://www.macnx.com/noflash/thanks.asp");
    }
?>

【问题讨论】:

  • 报错应该是headers已经发送了。
  • 请把错误贴出来让我们看看
  • 正如@ChrisB 所说,检查您是否在&lt;?php 或HTML 或任何其他类型的输出之外或之上有空格。如果不是这样,那么这是一个字节顺序标记问题。
  • 如果消息是Hi,这会失败吗?来吧伙计,我只是想说
  • 这只是一个常规的 500 错误。我要检查 php 日志

标签: php


【解决方案1】:

我认为问题在于您错误地使用了header();

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是通过 PHP。

PHP Documentation - header

【讨论】:

  • 那么我应该把标题移到别的地方吗?也许在“$mail->Send();”之前
  • 标题必须位于文件的最顶部
  • 哦,那可能是我的问题所在。我会尝试几件事。感谢您的帮助。我也将尝试得到错误。
  • 抱歉,我帮不上忙。尝试在脚本顶部添加这两行以显示错误。 error_reporting(E_ALL); ini_set("display_errors", 1);
  • 另外,请尝试删除 header() 并查看您是否仍然获得 500 页。如果您不这样做,那么您肯定是header() 造成了麻烦。
【解决方案2】:

我建议你使用 javascript 进行重定向

只要改变这个:

header("Location: http://www.macnx.com/noflash/thanks.asp");

到这里:

echo '<script>
window.location.href = "http://www.macnx.com/noflash/thanks.asp";
</script>';

【讨论】:

  • 为什么?这将导致浏览器历史记录出现问题,搜索引擎可能会因此而窒息。如果您绝对必须重定向,那么 HTTP 重定向是正确的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多