【问题标题】:contact form PHP redirect is not working联系表格 PHP 重定向不起作用
【发布时间】:2012-10-04 18:38:49
【问题描述】:

我在联系表单上提交消息后尝试重定向到我的主页,表单发送电子邮件但我收到此消息:

Array
(
    [name] => Abdo
    [company] => Mediabyrån A&B
    [email] => a.el-madhoun@hotmail.com
    [content] => Hejsan
    [contact_to] => info@web.se
)

警告:无法修改标头信息 - 标头已由 (输出开始于 /customers/4/5/a/webelite.se/httpd.www/kontakt.php:3) 在 /customers/4/5/a/webelite.se/httpd.www/kontakt.php 在第 39 行

我的联系表;

<form action="kontakt.php" method="post">
<p><input type="text" required="required" id="name" name="name" class="text_input" size="22"  />
<label for="name">Namn *</label></p>

<p><input type="text" required="required" id="company" name="company" class="text_input" size="22"  />
<label for="company">Företag *</label></p>

<p><input type="email" required="required" id="email" name="email" class="text_input"  size="22"  />
<label for="email">Epost *</label></p>

<p><textarea required="required" name="content" class="textarea" cols="30" rows="5"></textarea></p>

<p><button type="submit" class="button white"><span>Skicka</span></button></p>
<input type="hidden" value="info@web.se" name="contact_to"/>
</form>

这是我的 PHP:

<?php

echo $name = $_POST['name'];
echo $company = $_POST['company'];
echo $email =  $_POST['email'];
echo $content = $_POST['content'];

$mail_to = 'info@webelite.se';
$subject = 'Lilla form'.$name;

$body_message = 'From: '. $name . "\n"; 
$body_message .= 'company: '. $company . "\n";
$body_message .= 'E-mail: '. $email ."\n";
$body_message .= 'Message: '. $content;

$headers = 'From: '. $mail_name . "\r\n";
$headers .= 'Reply-To: '. $email ."\r\n";

$success = mail($mail_to, $subject, $body_message, $headers);

echo "<pre>";
print_r($_POST);

header('Location:mydomain');

?>

我也试过用 if

($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">"; 

这行得通,但在点击提交和被重定向之间我有一个难看的半秒闪现。

所有帮助都会得到帮助。

谢谢

【问题讨论】:

    标签: php forms email contact


    【解决方案1】:

    在重定向之前你不能在屏幕上输出任何东西。

    删除你所有的 echo'es 和 print_r's 就可以了。

    编辑:

    正如@jhonraymos 提到的,请务必正确使用header()。也许您更改了此设置以隐藏您要重定向到的实际页面。添加具有正确路径定义的本地文件,或者如果重定向到其他域,则需要定义完整的 url。如有疑问,请参阅Uniform resource locator

    另一个编辑:

    我看到你更新了你的问题。别再尝试印度魔法了,比如

    if ($success){
        print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">";
    

    只要接受在headers() 之前不要将ANYTHING输出到屏幕上的事实,你的灵魂就会永远安全。这不是混合 http-meta 的地方。PHP 可以做到这一点。

    这听起来可能首先是一个限制,但相信我,它不是。这是一种祝福。

    【讨论】:

    • 所以标题首先出现在我的 php 中并删除了回声?
    • 标头实际上可以留在原处。在调用header()之前不要在屏幕上输出任何内容
    【解决方案2】:

    标头用于与客户的浏览器进行通信。它们就像浏览器在收到时将执行的小命令。当您输出任何数据(文本、数字等)时,您的客户端浏览器将打印该数据。之后,浏览器将不再对您发送的任何标头感兴趣。

    header() 函数是用于发送自定义标头的函数。因此,当调用此函数时,标头会发送到客户端的浏览器。

    现在您对自己实际尝试做的事情有了一个非常简要的了解,您应该能够看到问题所在。

    在发送这些自定义标头之前,您正在输出其他数据。这就是触发错误的原因。

    所以这个:

    echo "<pre>";
    print_r($_POST);
    

    不应该在此之前:

    header('Location:mydomain');
    

    【讨论】:

      【解决方案3】:

      这是错误

      print_r($_POST);
      
      header('Location:mydomain');
      

      你在header("location: mydomain.com")之前打印一些东西

      【讨论】:

        【解决方案4】:

        是的,您不应该回显,在header 之前打印任何内容 尝试将其放在页面顶部:

        <?php ob_start(); ?>
        

        然后在页面底部放置:

        <?php ob_end_flush(); ?>
        

        【讨论】:

        • 谢谢它的工作,你们是最好的,快速的帮助和对菜鸟的好建议......谢谢
        • 虽然这可能行得通,但我真的建议您不要将其作为一种编程习惯,因为它是不,不,不。
        • @user1741191 最后使用 ob_end_flush()。
        • @user1741191 正如 budwiser 所说,这不是一个好的编程方法
        【解决方案5】:

        什么 echo "<pre>"; print_r($_POST); 是为了?

        您的重定向可能发生在调用任何回显函数之前,不是吗?

        【讨论】:

        • echo "&lt;pre&gt;"; print_r($_POST); 显然是为了调试$_POST 中的数据。 OP 只是没有意识到这会阻止修改标题。
        【解决方案6】:

        这是 php 中很常见的问题。一些整理方法:

        1. 在页面顶部使用。

        2. 检查是否不小心在 php 打开标记之前或 php 关闭标记之后添加了一些空格。

        3. 如果还是不能解决,用java-script window.location代替header。

        希望对您有所帮助。 编码愉快!

        【讨论】:

          【解决方案7】:

          您收到此警告是因为您将变量的值输出到屏幕并在此之后使用header 重定向。

          标题不能发送之后您打印的东西(echoprint_r ...)。 为了修复它,请按照下一个代码:

          $name = $_POST['name']; //no echo 
          $company = $_POST['company'];//no echo 
          $email =  $_POST['email'];//no echo 
          $content = $_POST['content'];//no echo 
          
          
          
          
          $mail_to = 'info@webelite.se';
          $subject = 'Lilla form'.$name;
          
          
          
          $body_message = 'From: '. $name . "\n"; 
          $body_message .= 'company: '. $company . "\n";
          $body_message .= 'E-mail: '. $email ."\n";
          $body_message .= 'Message: '. $content;
          
          
          
          $headers = 'From: '. $mail_name . "\r\n";
          $headers .= 'Reply-To: '. $email ."\r\n";
          
          
          
          $success = mail($mail_to, $subject, $body_message, $headers);
          
          
          
          //echo "<pre>";
          //print_r($_POST);
          

          【讨论】:

            猜你喜欢
            • 2012-07-22
            • 1970-01-01
            • 1970-01-01
            • 2014-03-31
            • 1970-01-01
            • 1970-01-01
            • 2015-05-08
            • 1970-01-01
            相关资源
            最近更新 更多