Autor Zpráva
T1000
Profil
ahoj,
nevim proč, ale server mi hlásí chybu v příkazu header.

Přesně píše:
Warning: Cannot modify header information - headers already sent by (output started at /hosting/unrealtournament3.cz/web/www/levemenu.php:9) in /hosting/unrealtournament3.cz/web/www/skripty.php on line 697

a příkaz vypadá takhle:
header("Location: index.php?nadpis=Seznam lidí&smazan=smazan");

Takže se to nepřesměruje...
Možná by to vyřešila fukce na vypnutí hlašení chyb, ale chyby by se měly řešit.
svadla
Profil
T1000
pred header nesmi byt echo ani zadny jiny vystup na obrazovku
TFSi
Profil
T1000
a příkaz vypadá takhle
Hele, příkaz je třeba "Sedni!", nebo "Lehni!", ale Header(...) vážně příkaz není.
V té chybě máš napsáno, že fce Header() nemůže upravit informace v hlavičce, protože jsi hlavičky už odeslal (přesněji v souboru levelmenu.php na řádku 9)

Možná by to vyřešila fukce na vypnutí hlašení chyb
No to by určitě nevyřešilo...

chyby by se měly řešit
To by měly ;)
T1000
Profil
no před tím je práce s databází...nic jineho, ale je to v podmínce
takhle:

if (sdaf)
{mysql_query();
header();}
T1000
Profil
to TFSi
a co s tím mám udělat?
svadla
Profil
T1000
jen tak mimochodem, na co ten header pouzivas?

tak sem posli tech 9 radku kodu.... a nevola ten tvuj skripty.php nejakej jinej soubor?
T1000
Profil
no na přesměrování, něco se upraví v databázi a potom by se to mělo přesměrovat...
no jakých 9 řádků? v tom souboru levemenu.php?
svadla
Profil
T1000
"no na přesměrování" no jasny, od toho header je, ja jen jestli nemuzes pouzit neco jineho...

me se tato chyba stavala kdyz pred zavolanim header byla treba jen mezera (treba pred <?)
T1000
Profil
jak to myslíš?
nightfish
Profil
T1000
RTF FAQ
Joker
Profil
Možná by to vyřešila fukce na vypnutí hlašení chyb
Hehehe, omlouvám se, ale připomnělo mi to jeden díl Simpsonových, kde Homer když se mu v autě rozsvítila kontrolka "závada motoru", řešil to přelepením kontrolky náplastí :-)

T1000
Stručně řečeno:
Před voláním funkce header() nesmí být odeslán prohlížeči žádný výstup. Tj. žádné echo() nebo cokoliv, co něco napíše na stránku. Navíc první znaky toho souboru musí být začátek PHP skriptu (před nimi ani mezera či prázdný řádek, u kódování UTF pozor na identifikační bajty UTF, které některé editory automaticky vkládají na začátek souboru a ještě navíc je nezobrazují)

Ta chyba píše, že výstup začal v levemenu.php na řádku 9, takže bych hledal tam. Ale už vzhledem k názvu levemenu.php mám podezření, že ten soubor něco vypisovat bude.

Další varianta je použít řízení výstupu ( http://cz.php.net/manual/cs/ref.outcontrol.php ), potom jde použít header() kdykoliv až do odeslání výstupu.
T1000
Profil
no podívám se.

Hehehe, omlouvám se, ale připomnělo mi to jeden díl Simpsonových, kde Homer když se mu v autě rozsvítila kontrolka "závada motoru", řešil to přelepením kontrolky náplastí :-)
u tohohle jsem se zasmál :-D
krteczek
Profil
T1000: bohužel, to nebylo k smíchu, ale k pláči...
T1000
Profil
takhle vypadá ten soubor levemanu.php (ten je naincludovaný do indexu):

<div class="cast_menu">
<img src="infout3.gif" alt="info UT 3">

<p class="polozka"><a href="index.php">&nbsp;Novinky</a></p>
<p class="polozka"><a href="index.php?nadpis=Základní info">&nbsp;Základní info</a></p>
<p class="polozka"><a href="index.php?nadpis=Linky na preview">&nbsp;Linky na preview</a></p>
<p class="polozka"><a href="index.php?nadpis=Recenze">&nbsp;Recenze</a></p>
<p class="polozka"><a href="index.php?nadpis=Linky na recenze">&nbsp;Linky na recenze</a></p>
djlj
Profil
no před tím je práce s databází...nic jineho
Tomu kódu, který jsi napsal, říkáš „nic jiného“? :)
Přečti si znovu celou diskusi.
T1000
Profil
no to jo ale to je v jinem souboru
Alphard
Profil
to je jedno, jestli to includuješ před header, tak je to jasné, výstup jako výstup
T1000
Profil
tak co s tím?
djlj
Profil
T1000
Řešení tady máš v diskusi napsané už několikrát. Neodesílat před hlavičkami žádný výstup. Přesměrování dej na začátek všech skriptů.
T1000
Profil
nj, ale to nemůžu udělat. Nešlo by to nějak udělat, aby to nevadilo?
daop
Profil *
T1000 jedna mala poznamka, urcite si header osetri pres session promenne, muze se ti stat ze najaky ftipalek navstivi stranku:

index.php?nadpis=Seznam lidí&smazan=smazan pred ten url prida adresu tveho hostinhu a uz si zacne vesele mazat co se mu zlibi. Tak doporucuji ve funkci ktera ma provadet mazani overovat opravnenost pouziti teto funkce, respektive u vsech funkci pouzivat testovani opravneni pouziti..... Pokut to uz mate tak to je ok, jen jsem to radsi rekl. Me se totiz neco podobneho take stalo. sice nic nesmazaly ale prislo me pres cca 1800 emailu jako report chyby. a kdyz jsem to analizoval, tak to byly vesmes utoky ma muj web.

jinak pokud se tice toho headru,
pokud nechces nic delat s kodem, nebo je kod uz tak slozity ze jeho predelani je neumerne pouzij fce, ktery veskery vystup nejprve nactou do externiho buferu a po po zadani specifickeho prikazu se teprve odesle prohlizeci. Vyhoda je zrejma. Header muzete pouzivat kdy se vam zachce. Ale spise doporuchji si kod radne promyslet. Sice take pouzivam tyto funkce na zachytavani vystupu ale to vystup jeste predavam funkci ktera formatuje html kod do elegantni podoby. Kdyz date potom zabrazit zdojak html, tak kod je velice prijemny......


ob_start();

timto dostanete cely vystup do promenne.....
samozrejme existuje fce, ktera to udela vsechno naraz, ale na tu se podivejte do manualu..... aby jsete se take neco naucil.... :).


$output = ob_get_contents();
ob_end_clean();
print $output ;
daop
Profil *
T1000
nj, ale to nemůžu udělat. Nešlo by to nějak udělat, aby to nevadilo?

pravdepodobne udelas nejaky test a podle vysledku neco vytisknes.... Nasleduje dalsi test a tedka zjistis ze otrebujes provest odskos na jinou stranu. Ze jo?
Ale tedka nastava problem, uz jsem neco poslal na vystup ale potrebuji odeslat novou hlavicku, ktera samozrejme uz nejde.

Tak dalsi ekegantni reseni je, nahradit vsechny prikazy echo a print, promennou....
to znamena:

echo "neco tisknu";
echo "dalsi tisk";

nahradit

$text ="neco tisknu";
$text .="dalsi tisk";

no a pokud potrebujes pouzit header, tak jsi nic neodeslal na vystup a klidne posny novou hlavicku....

Na konci fce, proved samotny tisk vsech textu.....

echo $text;
kde bude vsechne text vcetne html znaku...
T1000
Profil
no jasný to mám chráněné. No kod je velmi slozitý, ale myslím, že to ani líp udělat. Snad to půjde, jestli ne, tak se na to vykašlu, je to stejně jenom pro mě (mám to jenom v administraci).
T1000
Profil
a kam mám ob_start napsat? na začátek stránky nebo nad header?
Alphard
Profil
na začátek
T1000
Profil
ok, díky Vám všem

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: