header()调用时出错。
do_register.php页面执行到 header("Location:msg.php?m=register_success");
时出错。
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\accountSys\register.php:9) in C:\wamp\www\accountSys\do_register.php on line 29
register.php代码:
<body>
<?php 
    if($_POST["op"] == "注册新帐号") {
    //判断提交的op参数,如果为“注册新帐号”执行
include("do_register.php");//调用do_register.php文件,执行数据库插入操作
exit;
}
include("header.php");
?>
<!--//定义用户注册表单验证JS-->
<script>
    function check_form() { //定义一函数
    username = document.getElementById("edit-name").value;
password = document.getElementById("edit-pass").value;
password2= document.getElementById("edit-pass2").value;
mail = document.getElementById("edit-mail").value;
emsg = "";
//如果用户没有填写用户名、密码则设置emsg变量。
if(username = "") emsg += "用户名没有填写.\n";
if(password = "") emsg += "密码没有填写.\n";
//判断用户两次输入的密码是否一致,不一致则设置emsg变量
if(password != password2) emsg += "两次输入的密码不一样.\n";
//定义一个正则表达式,并对用户输入的邮箱进行匹配,如果不正确则设置emsg变量
var pattern = /^([a-zA-Z0-9])+@([a-zA-Z0-9_-]) + (.[a-zA-Z0-9_-])+/;
if(!pattern.test(mail)) emsg += "右键格式不正确.\n";
//如果emsg变量不为空,则说明用户提交的信息有误,则弹出出错信息,并返回。
if(emsg!="") {
    emsg ="------------------------\n\n"+emsg;
emsg = emsg + "\n----------------------------";
alert(emsg);
return false;
}else { //否则返回true,执行用户提交的操作
    return true;
}
}
</script>
<form action="register.php" method="post" id="user_register">
<div> <div class="form-item">
<label for="edit-name">用户名:
<span class="form-required" title="This field is required.">* </span></label>
<input type="text" maxlength="60" name="edit[name]" id="edit-name" size="30" class="form-text required" />
<div class="description" >你的全名或你更喜欢的名字。允许中英文,空格和数字。</div>
</div>
<div class="form-item" >
<label for="edit-pass" >密码:<span class="form-required" >*</span></label>
<input type="password"  maxlength="64" name="edit[pass]" id="edit-pass" size="30" />
<div class="description" >请输入您的密码。</div>
<input type="password" maxlength="64" name="edit[pass2]" id="edit-pass2" size="30"/>
<div class="description">请再次输入您的密码。</div>
</div>
<input type="submit" name="op" value="注册新帐号" onclick="return check_form();" />
<br />
<br />
</div></form>
    
</body>
do_register.php代码:<?php 
    include("dbconnect.php");
include("functions.php");
$form = check_form($_POST["edit"]);
$form["reg_time"] = date("Y-m-d H:i:s"); //使用date函数得到当前时间
$form["pass"] = md5($form["pass"]);//使用md5函数进行密码加密
extract($form);
$sql = "insert into users (username,password,sex,mail,tel,web,birthday,inter,intro,reg_time) ";
$sql .=" values ('{$name}',";
$sql .="'{$pass}',";
$sql .="'{$sex}',";
$sql .="'{$mail}',";
$sql .="'{$tel}',";
$sql .="'{$web}',";
$sql .="'{$birthday}',";
$sql .="'{$inter}',";
$sql .="'{$intro}',";
$sql .="'{$reg_time}') ";
$res = mysql_query($sql);
if(!res) {
    die("数据库出错,请返回重试。");
}
header("Location:msg.php?m=register_success");

?>

解决方案 »

  1.   

    header之前有输出了,html标签也算
      

  2.   

    前面加一个ob_start();
    后面加一个ob_end_flush();
      

  3.   

    do_register.php中在 header("Location:msg.php?m=register_success");前有内容输出。可能是空格,或者是utf-8编码有bom的格式。自己看错误信息,这是很常见的警告错误。
      

  4.   

    在最前面加ob_start();
    最后面加ob_end_flush();
    作用就是把头信息缓存起来,一起发送到客户端。
      

  5.   

        if($_POST["op"] == "注册新帐号") {
            //判断提交的op参数,如果为“注册新帐号”执行
            include("do_register.php");//调用do_register.php文件,执行数据库插入操作
            exit;
        }这段扔到页面起始位置,或者把header改成 
    echo "<script type='text/javascript'>location.href='msg.php?m=register_success';</script>";
      

  6.   

    好了  用了 echo "<script type='text/javascript'>location.href='msg.php?m=register_success';</script>";
    这个方法