Warning

Klasika.uz to tady bylo milionkrat ale reseni?

Warning: Cannot modify header information - headers already sent -- Použití funkce header(), setcookie() atp. předcházel výstup kódu stránky. Protokol HTTP vyžaduje, aby byly všechny hlavičky odeslány před prvním výstupem. Součástí chybové hlášky je, v kterém souboru a na kterém řádku výstup začal.

Podle tohodle textu jsem nepochopil co mam udelat aby to fungowalo.
Please help.SPECHA.
co treba nejdriv pouzit header(), resp. setcookie() a teprve potom echo, print atd? taky nesmi byt na zacatku zadny html kod (resp. cokoliv pred <?php - vcetne mezer & prazdnych radku...)
Ja fakt newim:(Tady je zdrojak.Tady ta anketa se nacita do tabulky v souboru index.php...Fakt newim co stim mam delat a potrebuju to mit co nejdriv zmakly:(


<?
$filename="anketa.dat";
$pruh=100;
if ($hlasuj<>'') {
$hlasoval++;
SetCookie("hlasoval", $hlasoval, Time()+86400);
if ($hlasoval==1) {
$file=FOpen($filename, "r+");
$data=Explode("#",FRead($file,999));
$data[$hlasuj]=$data[$hlasuj]+1;
Rewind($file);
FWrite($file, Implode($data,"#"));
FClose($file);
}else{$alert="Už jste hlasoval(a)!";}}
if (File_Exists($filename)):
$file = FOpen($filename, "r+");
$data=Explode("#",FRead($file,999));
Rewind($file);
else:
$file = FOpen($filename, "w");
$data[0]=0;
$data[1]=0;
$data[2]=0;
$data[3]=0;
$data[4]=0;
endif;
FClose($file);
?>


<head>
</head>

<body bgcolor="#FFFFFF" text="#000000">

<div align="center">
<left>
<table>
<tr>
<td valign="left"><font face="Verdana" size="2"><a HREF="index.php?hlasuj=0">Výborné</a></font></td>
<td valign="left"><font face="Verdana" size="2"><?if (($data[0]==0)and($data[1]==0)and($data[2]==0)and($data[3]==0)and($data[4]==0)) {echo "0(0%)";}else{?><img src="sloupec.gif" align="center" height="8" width="<?echo round($data[0]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*$pruh);?>"> <?echo $data[0],"(",round($data[0]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*100),"%)";}?></font></td>
</tr>
<tr>
<td valign="left"><font face="Verdana" size="2"><a HREF="index.php?hlasuj=1">Velmi dobré</a></font></td>
<td valign="left"><font face="Verdana" size="2"><?if (($data[0]==0)and($data[1]==0)and($data[2]==0)and($data[3]==0)and($data[4]==0)) {echo "0(0%)";}else{?><img src="sloupec.gif" align="center" height="8" width="<?echo round($data[1]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*$pruh);?>"> <?echo $data[1],"(",round($data[1]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*100),"%)";}?></font></td>
</tr>
<tr>
<td valign="left"><font face="Verdana" size="2"><a HREF="index.php?hlasuj=2">Dobré</a></font></td>
<td valign="left"><font face="Verdana" size="2"><?if (($data[0]==0)and($data[1]==0)and($data[2]==0)and($data[3]==0)and($data[4]==0)) {echo "0(0%)";}else{?><img src="sloupec.gif" align="center" height="8" width="<?echo round($data[2]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*$pruh);?>"> <?echo $data[2],"(",round($data[2]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*100),"%)";}?></font></td>
</tr>
<tr>
<td valign="left"><font face="Verdana" size="2"><a HREF="index.php?hlasuj=3">Dostačující</a></font></td>
<td valign="left"><font face="Verdana" size="2"><?if (($data[0]==0)and($data[1]==0)and($data[2]==0)and($data[3]==0)and($data[4]==0)) {echo "0(0%)";}else{?><img src="sloupec.gif" align="center" height="8" width="<?echo round($data[3]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*$pruh);?>"> <?echo $data[3],"(",round($data[3]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*100),"%)";}?></font></td>
</tr>
<tr>
<td valign="left"><font face="Verdana" size="2"><a HREF="index.php?hlasuj=4">Nedostačující</a></font></td>
<td valign="left"><font face="Verdana" size="2"><?if (($data[0]==0)and($data[1]==0)and($data[2]==0)and($data[3]==0)and($data[4]==0)) {echo "0(0%)";}else{?><img src="sloupec.gif" align="center" height="8" width="<?echo round($data[4]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*$pruh);?>"> <?echo $data[4],"(",round($data[4]/($data[0]+$data[1]+$data[2]+$data[3]+$data[4])*100),"%)";}?></font></td>
</tr>
<tr>
<td COLSPAN="2" align="center"><font face="Verdana" size="2" color="#808080">Hlasovalo <? $vysledek = $data[0]+$data[1]+$data[2]+$data[3]+$data[4];echo $vysledek;?>.</font></td>
</tr>
</table>
</left>
</div>

<?if ($alert<>'') {?>
<SCRIPT LANGUAGE=JAVASCRIPT>
alert('<?echo $alert?>');
</SCRIPT>
<?}?>
</body>
dobre.
a) na kterym radku to rika, ze je chyba?
b) kde zacal vystup (filename + line#)

> Tady ta anketa se nacita do tabulky v souboru index.php
takze te index.php vypada nejak takhle:
<td>...</td>
<td><?php include 'anketa.php';?></td>

jestli jo, tak musis dat
if ($hlasuj<>'') {
$hlasoval++;
SetCookie("hlasoval", $hlasoval, Time()+86400);
}
_pred_jakykoli_vystup, to znamena i pred veci, ktery jsou napsany mimo <?php ... ?>
PISE ME to tuto chybu:
Warning: Cannot modify header information - headers already sent by (output started at /3w/unas.cz/s/skoleni/2003/index.php:86) in /3w/unas.cz/s/skoleni/2003/anketa.php on line 6

Ale jestli jsem to pochopil,tak to mam jako udelat ze ta anketa bude jeste pred nebo jak?
Jak uz jkt rikal, zda se, ze anketu includujes v souboru index.php a tam evidentne mas nejaky vystup, takze se cookie proste nepodari nastavit. Zjistis to snadno: zobraz si zdrojak vygenerovane stranky a podivej se, co vsechno HTML stranka obsahuje pred tou chybou; uvidis, ze minimalne nejakou HTML hlavicku tam mit budes. Takze nastaveni te cookie musis proste nacpat uz nekam do toho indexu pred vsechny vypisy.

Jinak celkove ten kod vypada dost prasecky... ale to uz neni muj problem :)