我从以下代码中收到以下错误,我不完全确定原因。如果你能告诉我如何修复它,那就太好了。谢谢你提前。
警告:无法修改标题信息 - 已在第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;
?>
答案 0 :(得分:6)
取出回音电话,你不能在标题之前向浏览器发送信息。
你可以尝试这样的事情,以便在出现错误时仍然显示:
if(!$retval) {
echo "Unsuccessfull " . mysql_error();
}
答案 1 :(得分:1)
如果更改标题,则无法在标题命令之前输出任何文本,否则标题将会被发送。
即
if($retval) {
echo "Successfull";
} else {
echo "Unsuccessfull " . mysql_error();
}
在更改标题之前输出文字。
答案 2 :(得分:0)
答案 3 :(得分:0)
我通常建议在这种情况下将所有输出保存到最后,正如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
存储方法,但这是我个人的意见。
答案 4 :(得分:0)
使用:
<meta http-equiv="Refresh" content="0;url=http://www.example.com" />