Грешка с Header: location

amgcompany

Registered
Здравейте,

Преди малко ми излезе ето тази грешка
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\site\pages\news.php:411) in C:\xampp\htdocs\site\pages\news.php on line 458

А на съответния 458 ред е този код, в който аз не мога да видя грешката.

PHP:
header("location: news.php?type=post&id=$post");

Някакви предложения :)
 

tedo96

Registered
@header("location: news.php?type=post&id=$post");

Това не е най-правилното решение, но поне няма да ти се показва грешката. Проблема идва от това, че не си разделил добре логиката от това, което се извежда на екрана и има текст, който се извежда преди header()
 

eddyy93

Registered
Да не трябва да има никакви html тагове или echo - та преди header(). Също така файла ако ти е на utf-8 също може да ти прави този проблем. Файла трябва да е на utf-8 without BOM.
 

amgcompany

Registered
Еми като цяло това ми е кода и аз не виждам в него да има echo-та преди header

PHP:
if(isset($_POST['addcomment1']))
							{	
$froma = htmlspecialchars(addslashes($_POST['from']));
$news_comment = htmlspecialchars(addslashes($_POST['news_comment']));
								
$data_add = date('d M Y H:i', time());
$ip = htmlspecialchars(addslashes($_SERVER['REMOTE_ADDR']));
								
$error_news_com = array();
								
if(strlen($froma)>25 || strlen($froma)<3)
{
	$error_news_com[] = "Името трябва да е по-дълго от 3 символа и по-късо от 25 <br/>";
	}
								
if(strlen($news_comment)>500 || strlen($news_comment)<10)
	{
$error_news_com[] = "Коментара трябва да е по-дълъг от 10 символа и по-къс от 500 <br/>";
}
								
								
if(count($error_news_com) == 0)
{
									
mysql_query("INSERT INTO comments SET id_new='$post',froma='$froma', com_news='$news_comment', dateadd = '$data_add', ip='$ip'") or die(mysql_error());
header("location: news.php?type=post&id=$post");
								}

И файла ми е utf-8 without BOM
 

nom3r1

Registered
Грешката може да се дължи също и ако файла ти има бели пространства преди първото <?php на първи ред. Може да се дължи и на UTF с BOM.

Вижда ми се малко глупаво , но я пробвай така;
PHP:
if(isset($_POST['addcomment1'])) {       
$froma = htmlspecialchars(addslashes($_POST['from']));
$news_comment = htmlspecialchars(addslashes($_POST['news_comment']));
$data_add = date('d M Y H:i', time());
$ip = htmlspecialchars(addslashes($_SERVER['REMOTE_ADDR']));
$error_news_com = array();
if(strlen($froma)>25 || strlen($froma)<3) {
	$error_news_com[] = "Името трябва да е по-дълго от 3 символа и по-късо от 25 <br/>";
}
if(strlen($news_comment)>500 || strlen($news_comment)<10) {
	$error_news_com[] = "Коментара трябва да е по-дълъг от 10 символа и по-къс от 500 <br/>";
}
if(count($error_news_com) == 0) {
$query = mysql_query("INSERT INTO comments SET id_new='$post',froma='$froma', com_news='$news_comment', dateadd = '$data_add', ip='$ip'") or die(mysql_error());
if($query) {
header("location: news.php?type=post&id=$post");
}
}
 

amgcompany

Registered
nom3r1 каза:
Грешката може да се дължи също и ако файла ти има бели пространства преди първото <?php на първи ред. Може да се дължи и на UTF с BOM.

Вижда ми се малко глупаво , но я пробвай така;
PHP:
if(isset($_POST['addcomment1'])) {       
$froma = htmlspecialchars(addslashes($_POST['from']));
$news_comment = htmlspecialchars(addslashes($_POST['news_comment']));
$data_add = date('d M Y H:i', time());
$ip = htmlspecialchars(addslashes($_SERVER['REMOTE_ADDR']));
$error_news_com = array();
if(strlen($froma)>25 || strlen($froma)<3) {
	$error_news_com[] = "Името трябва да е по-дълго от 3 символа и по-късо от 25 <br/>";
}
if(strlen($news_comment)>500 || strlen($news_comment)<10) {
	$error_news_com[] = "Коментара трябва да е по-дълъг от 10 символа и по-къс от 500 <br/>";
}
if(count($error_news_com) == 0) {
$query = mysql_query("INSERT INTO comments SET id_new='$post',froma='$froma', com_news='$news_comment', dateadd = '$data_add', ip='$ip'") or die(mysql_error());
if($query) {
header("location: news.php?type=post&id=$post");
}
}

Не става :(
 

relax4o

Registered
Ами по тази логика, по която вървиш или сложи ob_start() в началото или това го огради така:


PHP:
<?php ob_start(); ?>
<div class="cont">

						<?php

							print $raw['content'];

						?>

						</div>
<?php ob_end_flush(); ?>
 

amgcompany

Registered
relax4o каза:
Ами по тази логика, по която вървиш или сложи ob_start() в началото или това го огради така:


PHP:
<?php ob_start(); ?>
<div class="cont">

						<?php

							print $raw['content'];

						?>

						</div>
<?php ob_end_flush(); ?>

Като сложих ob_start() в началото стана, иначе като го обградих не. Мерси на всички за помощта +1 за relax4o
 

Горе