Autor | Zpráva | ||
---|---|---|---|
regy Profil |
#1 · Zasláno: 11. 8. 2009, 08:37:20 · Upravil/a: regy
zdravím,
php mi vypisuje tuto chybu: Warning: Cannot modify header information - headers already sent by (output started at C:\PHPWebServer\http_docs\obuv\administrace\index.php:81) in C:\PHPWebServer\http_docs\obuv\administrace\scripts\addproduct.php on line 45 Hlášku jsem pochpil tak, že header location nemůže být nastaven¨, protože již byl nastaven v index.php. tam ale žádný header není. scripts\addproduct.php <?php if(isset($_GET['productcat'])) { $objekt_vysledku = mysqli_query($db_spojeni,'SELECT * FROM kategorie WHERE script = "'.$_GET['productcat'].'" ORDER BY nazev'); $kategorie = mysqli_fetch_array($objekt_vysledku); $nadpis = $kategorie['nazev']." -"; } else $nadpis = ""; if(isset($_POST['nazev']) and $_POST['nazev'] != "") { $foto = ""; if(empty($_POST['zobrazovat'])) $_POST['zobrazovat'] = "ne"; if(empty($_POST['akce'])) $_POST['akce'] = "ne"; $sql_prikaz = "INSERT INTO zbozi(id,nazev,popis,cena,kategorie,zobrazovat,akce,znacka,foto) " ."VALUES('null','" .mysqli_real_escape_string($db_spojeni,$_POST['nazev']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['popis']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['cena']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['kategorie']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['zobrazovat']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['akce']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['znacka']) ."','" .mysqli_real_escape_string($db_spojeni,$foto) ."')"; $new = mysqli_query($db_spojeni,$sql_prikaz); if (!$new) { echo 'Poslání SQL příkazu se nepodařilo, sorry'; echo '<br />'; echo 'Popis chyby: ', mysqli_error($db_spojeni); exit(); } if($_POST['next'] == "1"){ header("location: ?act=addproduct&productcat=".$_POST['kategorie']); }elseif($_POST['next'] == "2") { header("location: ?cat=".$_POST['kategorie']); } } echo "<h1>$nadpis Přidání produktu</h1><div class='margin'>"; $objekt_kategorie = mysqli_query($db_spojeni,'SELECT * FROM kategorie ORDER BY poradi'); $znacky = mysqli_query($db_spojeni,'SELECT * FROM znacky ORDER BY znacka'); echo " <form action='' method='post'> <table class='addproduct'> <tr><td class='left'>Název </td><td> <input type='text' name='nazev'></td></tr> <tr><td class='left'> Kategorie </td><td> <select name='kategorie'>"; while($kategorie = mysqli_fetch_array($objekt_kategorie)) { echo "<option value='".$kategorie['script']."'"; if(isset($_GET['productcat']) and $_GET['productcat'] == $kategorie['script']) echo " selected"; echo " >".$kategorie['nazev']."</option>"; } echo " </select> </td></tr> <tr><td class='left'> Značka </td><td> <select name='znacka'>"; while($znacka = mysqli_fetch_array($znacky)) { echo "<option value='".$znacka['znacka']."'>".$znacka['znacka']."</option>"; } echo " </select> </td></tr> <tr><td class='left'>Cena </td><td> <input type='text' name='cena' class='cena'> Kč</td></tr> <tr><td class='left'>Popis </td><td> <textarea name='popis'></textarea></td></tr> <tr><td class='left'>Vlastnosti</td><td class='check'> <input type='checkbox' name='zobrazovat' value='ano' id='ano1' checked><label for='ano1'>Zobrazovat<label><input type='checkbox' name='akce' value='ano' id='ano2'><label for='ano2'>Akční zobží</label> </td></tr> <tr><td class='left'> Po odeslání </td><td> <select name='next'> <option value='1'>Přidat další</option> <option value='2'>Zobrazit vybranou kategorii</option> </select> </td></tr> <tr><td colspan='2' class='submit'><input type='submit' value='Odeslat'></td></tr> </table> </form> "; echo "</div>"; ?> |
||
panther Profil |
#2 · Zasláno: 11. 8. 2009, 08:38:52
regy
přečti si místní FAQ. |
||
regy Profil |
#3 · Zasláno: 11. 8. 2009, 08:42:46
headers already sent...
Pokud už byl generovaný nějaký výstup, tak už nelze používat funkce header(), setcookie() ani session_start(). Jejich volání skončí chybou. Přesvědčete se, že před začátkem <?php ?> není žádný text (ani mezera) a že nebylo nic odesláno třeba funkcemi jako echo nebo print. Pokud je text v UTF-8, tím výstupem může být i tzv. BOM signatura, vizte výše zmíněný Divný znak (čtvereček).... Nikdy jsem s tím neměl problém a hlvně nechápu proč řádek 81 v index.php index: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <link rel="stylesheet" href="img/styles.css" type="text/css"> <script src="scripts.js" type="text/javascript" language="JavaScript"></script> <title>Dětská obuv - Administrace</title> </head> <body> <?php error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); session_start(); // -- Připojení k databázi a správné nastavení češtiny -- $db_spojeni = mysqli_connect('localhost', 'root', '35vfrd4te3', 'obuv', 3306); $objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'utf8'"); include("scripts.php"); //------------------------------------------------------------------------------ echo " <div id='body'> <div id='head'>Dětská obuv - Administrace</div> <div id='left' class='menu'> <h1><a href='?act=addcat' class='plus' title='Přidat kategorii' onclick='newcat(); return false;'>+</a>Kategorie zboží</h1> <div id='newcat' style='display: none;'><form action='#' onsubmit=\"newcatsubmit('new','null'); newcat(); return false;\"><input type='text' name='nazev' id='newcatvalue'><input type='submit' value='Přidat'></form></div> <ul id='katalog'>"; $objekt_vysledku = mysqli_query($db_spojeni,'SELECT * FROM kategorie ORDER BY poradi'); $posledy = mysqli_query($db_spojeni,'SELECT * FROM kategorie ORDER BY poradi DESC'); $posleda = mysqli_fetch_array($posledy); $poradi=1; while($radek = mysqli_fetch_array($objekt_vysledku)) { echo " <li> <a href='#' title='Smazat položku' class='del' onclick=\"newcatsubmit('del','".$radek['poradi']."')\"></a>"; if($poradi == 1) echo "<div class='jakosmer'></div>"; else echo "<a href='#' title='Posunout výš' class='up' onclick=\"newcatsubmit('".$radek['script']."','up')\"></a>"; if($radek['poradi'] == $posleda['poradi']) echo "<div class='jakosmer down'></div>"; else echo "<a href='#' title='Posunout níž' class='down' onclick=\"newcatsubmit('".$radek['script']."','down')\"></a>"; echo " <a href='?cat=".$radek['script']."'>".$radek['nazev']."</a> </li>"; $poradi++; } echo " </ul> <h1>Správa zboží</h1> <ul> <li><a href='?act=addproduct'>Přidat</a></li> <li><a href='?act=action'>Akční zboží</a></li> <li><a href='?act=brand'>Značky</a></li> <li><a href='?act=hidden'>Nezobrazované zboží</a></li> <li><a href='?act=all'>Kompletní seznam zboží</a></li> </ul> </div> <div id='right' class='menu'> <h1><a href='?act=addpage' class='plus' title='Přidat položku v menu' onclick='newpage(); return false;'>+</a>Menu</h1> <div id='newpage' style='display: none;'><form action='#' onsubmit=\"newpagesubmit('new', 'null'); newpage(); return false;\"> <input type='text' name='nazev' id='newpagevalue'> <select name='typ' id='newpagetyp'> <option value=''> Typ obsahu </option> <option value='text'>Text</option> <option value='fotogalerie'>Fotogalerie</option> </select> <input type='submit' value='Přidat'> </form></div> <ul id='menu'>"; $objekt_vysledku = mysqli_query($db_spojeni,'SELECT * FROM menu ORDER BY poradi'); $posledy = mysqli_query($db_spojeni,'SELECT * FROM menu ORDER BY poradi DESC'); $posleda = mysqli_fetch_array($posledy); $poradi=1; while($radek = mysqli_fetch_array($objekt_vysledku)) { echo " <li> <a href='#' title='Smazat položku' class='del' onclick=\"newpagesubmit('del','".$radek['poradi']."')\"></a>"; if($poradi == 1) echo "<div class='jakosmer'></div>"; else echo "<a href='#' title='Posunout výš' class='up' onclick=\"newpagesubmit('".$radek['script']."','up')\"></a>"; if($radek['poradi'] == $posleda['poradi']) echo "<div class='jakosmer down'></div>"; else echo "<a href='#' title='Posunout níž' class='down' onclick=\"newpagesubmit('".$radek['script']."','down')\"></a>"; echo " <a href='?page=".$radek['script']."'>".$radek['nazev']."</a> </li>"; $poradi++; } echo " </ul> <h1>Novinky</h1> <ul> <li><a href='#'>Přidat novinku</a></li> <li><a href='#'>Správa novinek</a></li> </ul> </div> <div id='content'>"; //------------------------------------------------------------------------------ if(isset($_GET['act'])) { include("scripts/".$_GET['act'].".php"); } elseif(isset($_GET['cat'])) include("scripts/cat.php"); echo " </div> </div>"; ?> </body> </html> |
||
Joker Profil |
#4 · Zasláno: 11. 8. 2009, 08:59:40
regy:
„Nikdy jsem s tím neměl problém“ No, pokud se neposílají žádné hlavičky, tak problém není :-) S hlavičkami to dělá problém vždycky. S tím indexem je to fakt divný, je to ten správný index.php? Hlavně v tomhle případě by mělo zkrachnout už session_start(). |
||
regy Profil |
#5 · Zasláno: 11. 8. 2009, 09:10:15
říkám, že jsem s tím nikdy problém neměl, i když jsem nastavoval header v inculudovaném souboru, který byl includován až po nějakém echu (funguje mi to jak na webhostingu tak na localhostu)... A ano je to ten správný index :-)
|
||
ninja Profil |
#6 · Zasláno: 11. 8. 2009, 10:13:54
regy: nastaveni headeru po odeslani nejakeho vysputu (echo) je nesmysl, to vam nefungovalo. Jen jste mozna mel nastavenu jinou uroven hlasei chyb a nic to neukazalo. Hlavicku musite odesilat vzdy pred jakymkoliv vystupem, tecka. Upravte si aplikaci.
|
||
regy Profil |
#7 · Zasláno: 11. 8. 2009, 10:19:19 · Upravil/a: regy
ale fungovalo... :-) př. tento script:
<?php echo "<h1 id='forumlegend'>"; echo "<a href='?show=dis'>Fórum</a>"; if(isset($_GET['category'])) { $objekt_vysledku = mysqli_query($db_spojeni,"SELECT * FROM fora WHERE id = '".$_GET['category']."' "); $radek = mysqli_fetch_array($objekt_vysledku); echo " » <a href=\"?show=".$_GET['show']."&category=".$_GET['category']."\">".$radek['nazev']."</a> " ; } if(isset($_GET['subject'])) { $objekt_vysledku = mysqli_query($db_spojeni,"SELECT * FROM temata WHERE id = '".$_GET['subject']."' "); $radek = mysqli_fetch_array($objekt_vysledku); echo " » <a href=\"?show=".$_GET['show']."&category=".$_GET['category']."&subject=".$_GET['subject']."\">".$radek['nazev']."</a> " ; } echo "</h1>"; //****************************************************************************** if(isset($_POST['prispevektext']) and $_POST['prispevektext'] != "" and $loged == 'true') { $text = text($_POST['prispevektext']); $sql_prikaz = "INSERT INTO prispevky(id,datum,text,textn,autor,tema,forum) " ."VALUES(null,NOW(),'" .mysqli_real_escape_string($db_spojeni,$text) ."','" .mysqli_real_escape_string($db_spojeni,fuckingescape($_POST['prispevektext'])) ."','" .mysqli_real_escape_string($db_spojeni,$_SESSION['nick']) ."','" .mysqli_real_escape_string($db_spojeni,$_GET['subject']) ."','" .mysqli_real_escape_string($db_spojeni,$_GET['category']) ."')"; $newre = mysqli_query($db_spojeni, $sql_prikaz); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$_GET['subject']); } if(isset($_POST['tematext']) and isset($_POST['temanazev']) and $_POST['tematext'] != "" and $_POST['temanazev'] != "" and $loged == 'true') { $text = text($_POST['tematext']); $sql_prikaz = "INSERT INTO temata(id,datum,nazev,text,textn,autor,forum) " ."VALUES(null,NOW(),'" .mysqli_real_escape_string($db_spojeni,$_POST['temanazev']) ."','" .mysqli_real_escape_string($db_spojeni,$text) ."','" .mysqli_real_escape_string($db_spojeni,fuckingescape($_POST['tematext'])) ."','" .mysqli_real_escape_string($db_spojeni,$_SESSION['nick']) ."','" .mysqli_real_escape_string($db_spojeni,$_GET['category']) ."')"; $newforum = mysqli_query($db_spojeni, $sql_prikaz); $objekt_vysledku = mysqli_query($db_spojeni,'SELECT * FROM temata WHERE forum = "'.$_GET['category'].'" ORDER BY datum DESC'); $subject = mysqli_fetch_array($objekt_vysledku); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$subject['id']); } if(isset($_POST['forumnazev']) and $admin == 'true') { $sql_prikaz = "INSERT INTO fora(id,nazev,popis,autor) " ."VALUES(null,'" .mysqli_real_escape_string($db_spojeni,$_POST['forumnazev']) ."','" .mysqli_real_escape_string($db_spojeni,$_POST['forumpopis']) ."','" .mysqli_real_escape_string($db_spojeni,$_SESSION['nick']) ."')"; $newforum = mysqli_query($db_spojeni, $sql_prikaz); Header("Location: index.php?show=dis"); } if(isset($_GET['x']) and $admin == 'true') { $objekt_vysledku = mysqli_query($db_spojeni,'DELETE FROM fora WHERE id = "'.$_GET['x'].'"'); Header("Location: index.php?show=dis"); } if(isset($_GET['xt']) and $admin == 'true') { $objekt_vysledku = mysqli_query($db_spojeni,'DELETE FROM temata WHERE id = "'.$_GET['xt'].'"'); Header("Location: index.php?show=dis&category=".$_GET['category']); } if(isset($_GET['xp']) and $admin == 'true') { $objekt_vysledku = mysqli_query($db_spojeni,'DELETE FROM prispevky WHERE id = "'.$_GET['xp'].'"'); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$_GET['subject']); } if(isset($_POST['edittext']) and $loged == 'true' and $_GET['edit'] == "thema") { $text = text($_POST['edittext']); $objekt_vysledku = mysqli_query($db_spojeni,'UPDATE temata SET nazev = "'.mysqli_real_escape_string($db_spojeni,$_POST['editnazev']).'", textn = "'.mysqli_real_escape_string($db_spojeni,fuckingescape($_POST['edittext'])).'", text = "'.mysqli_real_escape_string($db_spojeni,$text).'", zmeneno = NOW() WHERE id = "'.$_GET['subject'].'"'); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$_GET['subject']); } if($loged == 'true' and $_GET['close'] == "thema") { $objekt_vysledku = mysqli_query($db_spojeni,'UPDATE temata SET zamek = "true" WHERE id = "'.$_GET['subject'].'"'); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$_GET['subject']); } if(isset($_POST['edittext']) and $loged == 'true' and $_GET['edit'] != "thema") { $text = text($_POST['edittext']); $objekt_vysledku = mysqli_query($db_spojeni,'UPDATE prispevky SET textn = "'.mysqli_real_escape_string($db_spojeni,fuckingescape($_POST['edittext'])).'", text = "'.mysqli_real_escape_string($db_spojeni,$text).'", zmeneno = NOW() WHERE id = "'.$_GET['edit'].'"'); Header("Location: index.php?show=dis&category=".$_GET['category']."&subject=".$_GET['subject']."#".$_GET['edit']); } //****************************************************************************** celé se to nevešlo a header na 60. řádku funguje. |
||
ninja Profil |
#8 · Zasláno: 11. 8. 2009, 10:22:18
regy: komu neni rady, tomu neni pomoci...
|
||
nightfish Profil |
#9 · Zasláno: 11. 8. 2009, 10:25:34
dokážu si představit, že to funguje na serveru, který má nastaven nenulový output buffer
nicméně spoléhat na nějakou konkrétní hodnotu nastavení mi nepřijde jako rozumná volba pro přenositelnou aplikaci |
||
regy Profil |
#10 · Zasláno: 11. 8. 2009, 13:24:21
no ale zaráží mě, že mi to funguje jak na localhostu tak na webhostingu. A navíc
„Nikdy jsem s tím neměl problém a hlvně nechápu proč řádek 81 v index.php “ proč tedy zrovna řádek 81? |
||
reloader Profil * |
#11 · Zasláno: 13. 8. 2009, 15:38:12
pripocitej do toho indexu radky includovanyho scriptu a budes mit ten spravnej radek 81, ne?
|
||
AM_ Profil |
#12 · Zasláno: 13. 8. 2009, 16:13:38
reloader
to ne, ukazuje to skutečný řádek toho souboru :) Spíš je možné, pokud je na serveru nastavený nějaký ten buffer, že právě na tom řádku se naplní a odešle. |
||
denCo Profil |
#13 · Zasláno: 13. 8. 2009, 16:33:32
skus dat na uplny zaciatok
<?php ob_start(); ?> |
||
Časová prodleva: 15 let
|
0