Autor | Zpráva | ||
---|---|---|---|
Zirza Profil * |
#1 · Zasláno: 3. 1. 2013, 15:03:07
Ahoj, koupil jsem hosting u wedosu a mám problém. vypisuje mi to spoustu chyb typu:
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/35289/virtual/www/index.php:30) in /data/web/virtuals/35289/virtual/www/my_bikes.php on line 9 Přitom mi to fungovalo u endory i na localhostu. Kde je problém, co s tím můžu dělat? |
||
Enyeus Profil |
#2 · Zasláno: 3. 1. 2013, 15:24:49
Ahoj, problém je s tím, že upravuje hlavičky a přitom jsi už do prohlížeče poslal data (například mezeru).
|
||
Zirza Profil * |
#3 · Zasláno: 3. 1. 2013, 16:11:15
jj, chápu to, ale co s tím? Předpokládám, že bude problém ve verzi php nebo tak něco, když jinde mi to fungovalo. Dá se s tím něco udělat na mé straně?
|
||
_es Profil |
#4 · Zasláno: 3. 1. 2013, 16:12:59
|
||
Zirza Profil * |
#5 · Zasláno: 3. 1. 2013, 16:19:13
no třeba u této je vypadá soubor my_bikes. php takto:
<?php require("common.php"); if(empty($_SESSION['user'])){ header("Location: index.php?page=login"); die(); } $user_id = $_SESSION['user']['id']; $query = mysql_query("SELECT id, model, foto FROM bikes WHERE owner = $user_id ") or $err = 1; if(isset($err) or mysql_num_rows($query) == 0){ echo "<h2 id=\"err\">Zatím jste nepřidali žádný bike.</h2>"; } else { while ($result = mysql_fetch_array($query)){ $id = $result['model']; ?> <div class="my-bike"> <img src="content-images/bikes/<?php echo $result['foto']; ?>" class="my-bike-image" /> <p class="my-bike-info"><?php echo $brand." ".$modelname?></p> </div> <?php } } myslím, že vše popsané v odkazu splňuje, tak kde je chyba? |
||
Someone Profil |
#6 · Zasláno: 3. 1. 2013, 16:20:10
co je v souboru common.php ?
|
||
Zirza Profil * |
#7 · Zasláno: 3. 1. 2013, 16:22:25
přístup k databázi
|
||
Tori Profil |
Zirza:
A do toho index.php na řádek 30 jste kouknul? Bílé znaky, html, doctype,...? edit: anebo v tom index.php:30 může být třeba použitý neexistující klíč pole, který následně vygeneruje E_NOTICE a to je ten neočekáváný výstup. |
||
Zirza Profil * |
#9 · Zasláno: 3. 1. 2013, 17:18:10
začátek indexu vypadá takto: (je to teď drobně upraveno, chybu vypisuje na řádku 26)
<?php session_start(); require("common.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="cs"> <head> <link href="css/reset.css" rel="stylesheet" type="text/css"> <link href="css/style.css" rel="stylesheet" type="text/css"> <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> <script src="js/jquery-1.8.3.js" type="text/javascript"></script> <title>title</title> </head> <body> <div id="user-panel"> <div id="alcen"> <?php if(!empty($_SESSION['user'])){ $id = $_SESSION['user']['id']; $query = mysql_num_rows(mysql_query("SELECT id FROM messages WHERE viewed = 0 AND pro = $id ")); ?> |
||
Tori Profil |
#10 · Zasláno: 3. 1. 2013, 17:25:39
Zirza:
A kde se includuje ten my_bikes.php? |
||
Zirza Profil * |
#11 · Zasláno: 3. 1. 2013, 17:30:20
<?php session_start(); require("common.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="cs"> <head> <link href="css/reset.css" rel="stylesheet" type="text/css"> <link href="css/style.css" rel="stylesheet" type="text/css"> <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> <script src="js/jquery-1.8.3.js" type="text/javascript"></script> <title>title</title> </head> <body> <div id="user-panel"> <div id="alcen"> <?php if(!empty($_SESSION['user'])){ $id = $_SESSION['user']['id']; $query = mysql_num_rows(mysql_query("SELECT id FROM messages WHERE viewed = 0 AND pro = $id ")); ?> <a href="index.php?page=edit_account" class="move">» Upravit účet</a> <a href="index.php?page=messages">» Zprávy (<?php echo $query; ?>)</a> <?php if($_SESSION['user']['rights'] == 1) { echo "<a href=\"admin\" class=\"move\">» Administrace</a>"; } ?> <a href="logout.php" class="move">» Odhlásit se</a> <?php } else { echo "Uživatelský panel <a href=\"index.php?page=my_bikes\" class=\"move\">» Přihlásit se</a>"; } ?> </div> </div> <div id="content"> <div id="header"> <div id="nav"> <a href="index.php?page=articles">Články</a> <a href="index.php?page=documents">Dokumenty</a> <a href="index.php?page=find_bike">Motocykly</a> <a href="index.php?page=forum">Fórum</a> </div> <a href="index.php"><img src="images/logo.png" alt="ČeskéMotocykly.cz"></a> </div> <?php if(isset($_GET['page'])){ if(file_exists($_GET['page'].".php")){ include($_GET['page'].".php"); // tady se vloží my_bikes.php, pokud je volán } else { echo "<h2 id=\"err\">Požadovanou stránku se bohužel nepodařilo nalézt...</h2>"; } } else { ?> |
||
_es Profil |
#12 · Zasláno: 3. 1. 2013, 17:38:01
Zirza:
include($_GET['page'].".php"); // tady se vloží my_bikes.php, pokud je volán my_bikes.php máš volanie funkcie header - čiže si stačilo poriadne prečítať odkazovaný text v [#4].
|
||
Zirza Profil * |
#13 · Zasláno: 3. 1. 2013, 17:52:36
no dobře, ale ta fce header je použita pouze když je prázdná $_SESSION['user'] tzn. když uživatel není přihlášen, přesměrovávám ho na login. Jak to mám teda jinak udělat?
|
||
_es Profil |
#14 · Zasláno: 3. 1. 2013, 18:03:36
Zirza:
„tzn. když uživatel není přihlášen, přesměrovávám ho na login.“ Ale cez HTTP hlavičku ho už presmerovať nemôže, lebo HTTP hlavičky musia byť pred obsahom. „Jak to mám teda jinak udělat?“ Overovať prihlásenie pred tým, než PHP skript odošle akýkoľvek HTML obsah. |
||
Zirza Profil * |
#15 · Zasláno: 3. 1. 2013, 18:06:34
a proč na localhostu a na hostingu u endory mi to fungovalo?
|
||
_es Profil |
#16 · Zasláno: 3. 1. 2013, 18:13:10
Zirza:
Asi bolo nastavené oneskorené odosielanie hlavičiek. |
||
Zirza Profil * |
#17 · Zasláno: 3. 1. 2013, 18:36:58
a ještě jeden dotaz. Stejnej problém je s cookies (setcookie();) a ty můžu jen těžko přesunout před výpis obsahu. Nejde to nějak očůrat?
|
||
Amunak Profil |
#18 · Zasláno: 3. 1. 2013, 18:40:57
Zirza:
A proč bys nemohl? To je takový problém mít nejprve logiku skriptu, a teprve potom vykreslení obsahu? Řekl bych, že v tom případě asi píšeš kód špatně. Pokud se ti nechce všechno přepisovat, můžeš použít ob_start. |
||
_es Profil |
#19 · Zasláno: 3. 1. 2013, 18:41:07
Zirza:
„Stejnej problém je s cookies (setcookie();) a ty můžu jen těžko přesunout před výpis obsahu.“ Prečo by sa to nedalo presunúť pred obsah? Veď výpis obsahu s nastavením a prečítaním cookie nesúvisí. |
||
Zirza Profil * |
#20 · Zasláno: 3. 1. 2013, 18:44:35
no právě že souvisí. Mám v tom indexu includovanou stránku, ta načítá další obsah. A já si chci vytvořit cookie s id toho obsahu.
|
||
Jan Tvrdík Profil |
#21 · Zasláno: 3. 1. 2013, 18:55:08
|
||
_es Profil |
#22 · Zasláno: 3. 1. 2013, 18:58:58
Zirza:
„Mám v tom indexu includovanou stránku, ta načítá další obsah.“ No tak to sprav tak, aby sa ten „ďalší obsah“ načítal až po nastavení cookie a odoslaní všetkých hlavičiek. To je len výhovorka: „Mám to zle zbastlené a nechce sa mi to spraviť správne, lebo to je zle zbastlené na veľa miestach“ |
||
Zirza Profil * |
#23 · Zasláno: 3. 1. 2013, 19:25:36
ok, ok.
tak ještě poslední dotaz. jen tak nazačátek mé nové programátorské éry :-) Dejme tomu že mám třeba přihlašovací skript: <?php if (isset($_POST['jmeno'])){ //kontrola správnosti údaju atd..... header("Location: index.php"); } else { ?> <form action=$_SERVER['PHP_SELF'] method=post> <input type=text name=jmeno> submit </form> <?php } a to celý includuju do indexu, kde mám hlavičku kódování, nabídku, atd., atd. a to je podle všecho špatně... Jak to mám teda správně dělat? |
||
Jan Tvrdík Profil |
#24 · Zasláno: 3. 1. 2013, 19:34:09
Zirza:
„Jak to mám teda správně dělat?“ Nejtupější řešení (tj. bez použití šablonovacího systému), které mě napadá, je toto: layout.tpl.php <!doctype html> <head>...</head> <body><?php include $contentPath; ?></body> login.tpl.php <form action=<?php echo $_SERVER['PHP_SELF'] ?> method=post> <input type=text name=jmeno> submit </form> login.php <?php if (isset($_POST['jmeno'])){ //kontrola správnosti údaju atd..... header("Location: index.php"); exit; // nezapomínat! } $contentPath = __DIR__ . '/login.tpl.php'; include __DIR__ . '/layout.tpl.php' |
||
Časová prodleva: 11 let
|
0