新手求解!!Cannot modify header information…的问题TAT

Jellypowder 2012-06-12 04:06:59
我想用PHP contact form做一个inquiry page, 让人填上姓名、电话、email等, 按”send”就会将以上资料变成email 发到我的mail box

但其实我是新手…整个contact form基本上是用这个网教的抄抄改改出来的: http://myphpform.com/php-form-tutorial.php

按了”send”后我想网页跳到thank you page, 但会出现”Cannot modify header information – header already sent by (output started at C:\inetpub\wwwroot\contant2.php:1) in C:\inetpub \wwwroot\contant2.php on line 34” 这个问题

*Line34 = header('location:ThankYou.html');

我找过解决方法, 试了
1. 在header后加exit();
2. 加上<?php ob_start(); ?>和ob_end_flush();

最后是可以成功寄出email, 资料有遗漏也会跳到error page, 但都是无法去到thank you page…都是会出现Cannot modify header information(略)

请问我加exit / ob_start的地方有错吗? 还是有什么其他问题呢?
麻烦各位高手帮忙看看><"

以下是代码

P.S.我是用notepad做这个php档的



<?php ob_start(); ?>
<?php
date_default_timezone_set('Asia/Hong_Kong');
ini_set("sendmail_from","*****@yahoo.com");
ini_set("SMTP","smtp.wtt-mail.com");

$myemail = "**********@yahoo.com";
$company = check_input($_POST['company'], "Please enter your company's name");
$person = check_input($_POST['person'], "Please enter your name");
$tel = check_input($_POST['tel'], "Please enter your contact number");
$email = check_input($_POST['email'], "Please enter your E-mail");
$subject = "Online Enquiry";

if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("E-mail address not valid");
}
if (!preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i", $website))
{
$website = '';
}
$message = "Hello!
Contact form has been submitted by:
Company Name: $company
Contact Person: $person
Tel: $tel
E-mail: $email
Content:
$content
End of message

";
mail($myemail,$subject,$message);
header('location:ThankYou.html');
exit();
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}
function show_error($myError)
{
?>

<html>
<head>
<title>Order form error</title>
<style type="text/css">
.style2 {
text-align: center;
border-width: 0px;
}
</style>
</head>
<body>

<MARQUEE direction="right" hspace="200" vspace="50" behavior="alternate">
<H2><b>Please correct the following error:</b><br /><H2>
<H2><?php echo $myError; ?><H2>
</MARQUEE>

<p>
<p class="MsoNormal" align="center">
<input type="button" value=" Back to previous page " onclick="history.back()">
<p class="MsoNormal" align="center">
</p>

</body>
</html>
<?php
exit();
}
ob_end_flush();
?>



...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jellypowder 2012-06-13
  • 打赏
  • 举报
回复
改來改來去還是看不到php错误提示...

但我找到問題所在了,是bom頭的問題
雖然我加上ob_clean();還是不行,我用notepad將原本的php檔另仗另存为一個ANSI编码的同名文件,再用EditPlus将该文件另存为UTF-8编码的文件,問題便解決了,謝謝各位!
qq120848369 2012-06-12
  • 打赏
  • 举报
回复
浏览器右键看源码。
黄袍披身 2012-06-12
  • 打赏
  • 举报
回复
除了 On 还需要设置显示的级别
error_reporting(E_ALL);

[Quote=引用 4 楼 的回复:]

我把header那行改成
//header('location: ThankYou.html');
然後在php.ini改了display_errors = On
是這樣沒錯吧?

(我不是用apache是用IIS的)重启了之後......浏览器出現的是一片空白......
[/Quote]
代码如诗 2012-06-12
  • 打赏
  • 举报
回复
检查下文件是否有bom头,有的话去掉
在header('location: ThankYou.html');前面加上ob_clean();试试
Jellypowder 2012-06-12
  • 打赏
  • 举报
回复
我把header那行改成
//header('location: ThankYou.html');
然後在php.ini改了display_errors = On
是這樣沒錯吧?

(我不是用apache是用IIS的)重启了之後......浏览器出現的是一片空白......
黄袍披身 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

喔...不好意思那空行是发帖时手滑按到的...
[/Quote]

把 header('location:ThankYou.html'); 注释,打开php错误提示 重启apache 之后看看错误提示什么.
Jellypowder 2012-06-12
  • 打赏
  • 举报
回复
喔...不好意思那空行是发帖时手滑按到的...
一起混吧 2012-06-12
  • 打赏
  • 举报
回复
<?php ob_start(); ?> 之前有空行。
顶格写就不用 ob_start(); 了呀。或者用js跳转。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧