zaba12
11.04.2006, 13:17:37
Witam mam problem z header mam taki poczatek kodu glownego indexu administracji oto kod
<? require("../config.php"); ob_start(); ?>
<title>
<? echo $tytul_a; ?></title>
I niestety niedziala mi to oto bład:(
Kod
Warning: Cannot modify header information - headers already sent by (output started at D:\WebServ\httpd-users\cmsik\Administracja\index.php:4) in D:\WebServ\httpd-users\cmsik\Administracja\function\newsy.php on line 111
TomASS
11.04.2006, 13:35:32
A czy przed headerem nie dołączasz pliku ./function/newsy.php ? Bo prawdopodobnie to powoduje konflikt.
zaba12
11.04.2006, 13:42:32
plik jest nizej w
<?php
if ($cmd == 'news'){ include ("function/newsy.php"); newsy(); }
?>
TomASS
11.04.2006, 13:59:10
A czy mógłbym grzecznie poprosić o większą ilość kodu?
zaba12
11.04.2006, 14:08:59
Tak oczywiscie zapodam cały kod odrazu
<?php
//Newsy
elseif ($cmd == '1') {
include ("function/newsy.php");
echo '<table align="center" width="100%"><tr><td height="20%" bgcolor="#F4F4F4">ID</td><td height="20%" bgcolor="#F4F4F4">Tytuł</td><td height="40%" bgcolor="#F4F4F4">Data</td><td height="20%" bgcolor="#F4F4F4">Dodał</td><td bgcolor="#F4F4F4">Inne</td></tr>';
newsy();
echo '<table align="center" width="100%"><tr><td height="20%">ID</td><td height="20%">Tytuł</td><td height="40%">Data</td><td height="20%">Status</td><td height="20%">Dodał</td></tr>';
newsy_zg();
dodaj_newsa();
} elseif ($cmd == 'd_ok') {
include ("function/newsy.php");
d_ok();
} elseif ($cmd == 'news_del') {
include ("function/newsy.php");
news_del();
} elseif ($cmd == 'e_kom_news') {
include ("function/newsy.php");
e_kom_news();
} elseif ($cmd == 'edit_n') {
include ("function/newsy.php");
edit_news();
} elseif ($cmd == 'edit_n_ok') {
include ("function/newsy.php");
edit_n_ok();
}
?>
Cała treść sie nie zmiesciła........
TomASS
11.04.2006, 14:16:45
Ja tutaj nie widzę żadnego headera, gdzie on jest i w
jakim kontekście
zaba12
11.04.2006, 14:24:21
<?php
function edit_n_ok()
{
global $tytul,$text,$data,$zrodlo,$dodal,$id;
$query = "UPDATE news SET tytul='$tytul', tresc='$text', zrodlo='$zrodlo' WHERE id=$id";
header("location: index.php?cmd=1");
}
?>
oto chodzilo ? i on niedziala header ;/
TomASS
11.04.2006, 14:29:15
I nic wczesniej? Mysql nie wywala żadnego błedu?
zaba12
11.04.2006, 14:31:08
no wlasnie mysql nie wywala zadnego bledu all sie zmienia w bazie ale niedziala tylko ten header ;/ tylko w administracji a na www działa ;(
Seth
11.04.2006, 14:39:43
Blad, ktory podales oznacza tyle, ze przed wyslaniem headera() do przegladarki, cos wczesniej juz do niej zostalo wyslane.
Headera mozna uzyc tylko wtedy gdy zadne inne dane nie zostaly przeslane do klienta - czyli nic nie wypisujesz przez echo, print itd. itp.
Ten blad mogl tez pwostac przez to, ze wystapil jakis blad, zanim wyslales naglowek. A jak wiadomo bledy (w zaleznosci od konfiguracji) wysylaja na wyjscie (do przegladarki) komunikat - a to wystarczy aby headery nie dzialaly.
Jezeli zamieszalem to pytaj, ogolnie chodzi o to, ze header _nie moze_ byc wyslany po jakichkolwiek danych wyslanych do klienta.
phobos
11.04.2006, 14:52:34
masz takie cos
<?php
elseif ($cmd == 'edit_n_ok') {
include ("function/newsy.php");
edit_n_ok();
?>
a w funkcji masz header()
tylko ze przed funkcja masz inculde i temu masz blad
spróbuj zamienic
<?php
header("location: index.php?cmd=1"); ?>
na takie cos
<?php
echo "<script>self.location.href=\" index.php?cmd=1\";</script>";
?>
powinno dzialac
060156
11.04.2006, 15:03:52
Aby unikacj takich problemow,
mo stosowac grupe funkcji zaczynajacych
sie od prefixu ob_... poszukaj
w podreczniku php sa bardzo pomocne
zaba12
11.04.2006, 18:05:40
Cytat(phobos @ 2006-04-11 15:52:34)
a w funkcji masz header()
tylko ze przed funkcja masz inculde i temu masz blad
spróbuj zamienic
<?php
header("location: index.php?cmd=1"); ?>
na takie cos
<?php
echo "<script>self.location.href=\" index.php?cmd=1\";</script>";
?>
powinno dzialac
To mi pomogło wielkie dzięki.
TomASS
11.04.2006, 21:37:49
<?php
echo "<script>self.location.href=\" index.php?cmd=1\";</script>"; ?>
Ale to nie rozwiązuje problemu do końca!
Co będzie jeśli ktoś ma wyłączony JS?
Jaki jest cel w wysyłaniu czegoś do przeglądarki i zaraz po tym wywołanie header.... ? Tak nie powinno się robić i używanie self.location to zły nawyk.
phobos
11.04.2006, 22:20:13
wiem napisalem mu ze ma inlude przed header i dlatego ma blad
ALE popatrz sobie jaki on plik includuje "functions/news.php" tak wiec w tym pliku sa funkcje do ktorych sie odwoluje
i teraz jezeli include da za wywolaniem funkcji to bedzie mial komunikat "call to ....."
a jak da za inculde to ma header error tak wiec js w tym przypadku jest dobre bo on tak to potrzebuje tylko do przekierowanie na inna stronke po dodaniu newsa
TomASS
11.04.2006, 22:50:05
Wysztko się zgadza, tylko po co wywołuje jakąś funkcję z pliku (lub cały plik) która coś wyświetla, jak zaraz nastąpi przekierowanie? Co będzie jak ktoś ma wyłączony JS? (ponawiam swoje pytania)
To tylko 'kamufluje', zasłania problem.
To tak jaby pozbywać się Notice za pomocą konfiguracji Apache.
Dalej uważam, że powinno poprawić się skrypt a nie używać JS.
Wybór należy do autora wątku...
phobos
11.04.2006, 23:04:10
odpowiedz : jak ktos ma wylaczone js to skrypt js nie zadziala :-)
autor widac woli sobie wkleic plik z funkcjami niz "zasmiecac" sobie nimi plik ktory wykonuje okrelsona akcje w zalerznosci od argumentu "cmd"
teraz pomoglem mu tak a za jakis czas autor jak spojrzy sobie na ten skrypt to bedzie sie sam smial z siebie ze pisal jak noob i poprawi tak wszystko ze bedzie on zajmowal polowe mniej wiersz , ale to za jakis czas a narazie dopiero zdobywa doswiadczenie i dla niego to co teraz zrobil jest na 5, pozniej pewnie usunie ten skrypt js i znowu zastapi go header() i bedzie mu wszystko gralo
TomASS
11.04.2006, 23:10:58
Cytat
narazie dopiero zdobywa doswiadczenie
Ale właśnie chciałbym kolegę nauczyć jak poprawnie i z dobrymi nawykami pisać

EOT z mojej strony
phobos
11.04.2006, 23:25:35
jakbysmy chcieli nauczyc go dobrze pisac kod to nie powinno sie mu wpierw wypomniec to ze robi :
<?php
elseif(....)
{
inculde(...)
funkcja();
}
elseif(....)
{
inculde(...)
funkcja();
}
?>
jak moze wczytac plik z funkcjami tylko raz na poczatku, a zamiast elseif ..... zastosowac switch()
EOT z mojej strony rowniez
bim2
12.04.2006, 12:59:48
Mhh widze ze kolega ma na gorze "enter" ja mialem problemy z header takie ze przed php nie moze byc zadnych liter spacji itp., a echo przed header set_cookie sesion dziala

a jak dasz przed <?php spacje to nie dziala

sprobuj bez entera ;P
gathor
13.04.2006, 09:44:03
hej. Co do header to nawet poprawnie napisany kod moze nie dzialac. Mialem taki problem gdy bylem zmuszony zachowywac pliki php jako utf-8. Zadnych przekierowan wtedy nie moglem robic nawet gdy wszystko bylo na poczatku skryptu. w iso dziala bez problemu. Wiec jesli komus nie dziala header to moze wlasnie to? A moze ktos na na to rade?
pozdrawiam (jestem poczatkujacy)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.