我在联系表单上提交邮件后尝试重定向到我的主页,表单发送电子邮件但收到此消息:
Array
(
[name] => Abdo
[company] => Mediabyrån A&B
[email] => a.el-madhoun@hotmail.com
[content] => Hejsan
[contact_to] => info@web.se
)
警告:无法修改标头信息 - 已发送的标头 (输出始于 /comersomers/4/5/a/webelite.se/httpd.www/kontakt.php:3)in 第39行/customers/4/5/a/webelite.se/httpd.www/kontakt.php
我的联系表格;
<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\">";
这很有效,但在提交和重定向之间我得到了一个丑陋的半秒闪光。
所有帮助都是适当的。
谢谢
答案 0 :(得分:4)
在重定向之前,您无法向屏幕输出任何内容。
删除所有echo
和print_r
,你应该没事。
修改强>
同样@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可以做到这一点。
这听起来可能是一个限制,但相信我,事实并非如此。这是一种祝福。
答案 1 :(得分:4)
这是错误
print_r($_POST);
header('Location:mydomain');
您正在header("location: mydomain.com")
答案 2 :(得分:4)
标题用于与客户端的浏览器通信。它们就像浏览器收到时会执行的小命令。当您输出任何数据(文本,数字等)时,您的客户端浏览器将打印该数据。之后,浏览器将不再对您发送的任何标题感兴趣。
header()
函数是用于发送自定义标头的函数。因此,当调用此函数时,标题将发送到客户端的浏览器。
现在您对您实际尝试的内容有一个非常简短的了解,您应该能够看到问题所在。
您在发送这些自定义标头之前输出其他数据。这就是触发错误的原因。
所以这个:
echo "<pre>";
print_r($_POST);
不应该在此之前:
header('Location:mydomain');
答案 3 :(得分:3)
是的,你不应该回应,在header
之前打印任何东西
尝试将其放在页面顶部:
<?php ob_start(); ?>
然后在页面底部:
<?php ob_end_flush(); ?>
答案 4 :(得分:2)
是什么
echo "<pre>";
print_r($_POST);
是为了?
您的重定向可能在调用任何echo函数之前发生,不是吗?
答案 5 :(得分:2)
这是php中非常常见的问题。一些解决方法:
在页面顶部使用。
检查您是否在php open标记之前或php关闭标记之后不小心添加了一些空格。
如果仍未解决,请使用java-script window.location而不是header。
希望有所帮助。 快乐的编码!!
答案 6 :(得分:1)
您收到此警告是因为您在屏幕上输出了变量的值,然后在header
之后重定向。
标题无法在>>打印后发送 echo
,print_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);