无法修改标题信息[重复]

  可能重复:   标头已经由PHP发送 我从以下代码中收到以下错误,我不完全确定原因。如果你能告诉我如何修复它,那就太好了。提前致谢。 警告:无法修改标题信息 - 第45行已经发送的标题(输出从...开始)。
<?php


    // Initialization
    $conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
    mysql_select_db(DB_NAME, $conn);

    // Error checking
    if(!$conn) {
        die('Could not connect ' . mysql_error());
    }

    // Localize the GET variables
    $ref  = isset($_GET['ref']) ? $_GET['ref'] : "";

    // Protect against sql injections
    // Insert the score
    $retval = mysql_query("INSERT INTO $table(
            site
        ) VALUES (
            '$ref'
        )",$conn);

    if($retval) {
        echo "Successfull";
    } else {
        echo "Unsuccessfull " . mysql_error();
    }

    mysql_close($conn);
?>
<?php
$url = $_GET['url'];
    $loc = 'Location: '. $url;
    header($loc);
exit;
?>
    
已邀请:
取出echo呼叫,你不能在标题之前向浏览器发送信息。 您可以尝试这样的事情来显示是否发生错误:
if(!$retval) {
    echo "Unsuccessfull " . mysql_error();
}
    
如果更改标题,则无法在标题命令之前输出任何文本,否则标题将已发送。 即。
if($retval) {
    echo "Successfull";
} else {
    echo "Unsuccessfull " . mysql_error();
}
在更改标题之前输出文本。     
使用输出缓冲区:http://php.net/manual/en/function.ob-start.php
ob_start();
在开始和
ob_end_flush();
在末尾。     
我通常建议在这种情况下将所有输出保存到最后,正如gmadd所提到的,你可以做
ob_start
,但我更喜欢将数据存储在一个字符串中,而不必添加额外的代码(我知道你也可以在.htaccess文件中指定这个,我会去添加实际的
ob_start
项目。 我会怎么做:
$display = ""; // initiate the display string 
// etc doe here
if($retval) {
    $display .= "Successfull";
} else {
    $display .= "Unsuccessfull " . mysql_error();
}

// end of the script right before ?>
echo $display;
?>
ob_start
方法有效,如果你想走那条路,你可以在.htaccess文件中添加它(假设在apache设置中设置了allowoverride):
php_value output_buffering On
我仍然推荐
$display
存储方法,但这是我个人的意见。     
使用:
<meta http-equiv="Refresh" content="0;url=http://www.example.com" />
    

要回复问题请先登录注册