Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/MYSQL]Header problem
Forum PHP.pl > Forum > PHP
zaba12
Witam mam problem z header mam taki poczatek kodu glownego indexu administracji oto kod

  1. <? require("../config.php"); ob_start(); ?>
  2.  
  3. <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
A czy przed headerem nie dołączasz pliku ./function/newsy.php ? Bo prawdopodobnie to powoduje konflikt.
zaba12
plik jest nizej w
  1. <?php
  2. if ($cmd == 'news'){ include ("function/newsy.php"); newsy(); }
  3. ?>
TomASS
A czy mógłbym grzecznie poprosić o większą ilość kodu?
zaba12
Tak oczywiscie zapodam cały kod odrazu

  1. <?php
  2. //Newsy
  3.  elseif ($cmd == '1') {
  4.  
  5. echo 'Aktualnosci';
  6.  
  7. include ("function/newsy.php");
  8.  
  9. 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>';
  10.  
  11. newsy();
  12.  
  13. echo '</table>';
  14.  
  15. 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>';
  16.  
  17. newsy_zg();
  18.  
  19. echo '</table>';
  20.  
  21. dodaj_newsa();
  22.  
  23. } elseif ($cmd == 'd_ok') {
  24.  
  25. include ("function/newsy.php");
  26.  
  27. d_ok();
  28.  
  29. } elseif ($cmd == 'news_del') {
  30.  
  31. include ("function/newsy.php");
  32.  
  33. news_del();
  34.  
  35. } elseif ($cmd == 'e_kom_news') {
  36.  
  37. include ("function/newsy.php");
  38.  
  39. e_kom_news();
  40.  
  41. } elseif ($cmd == 'edit_n') {
  42.  
  43. include ("function/newsy.php");
  44.  
  45. edit_news();
  46.  
  47. } elseif ($cmd == 'edit_n_ok') {
  48.  
  49. include ("function/newsy.php");
  50.  
  51. edit_n_ok();
  52.  
  53. }
  54. ?>


Cała treść sie nie zmiesciła........
TomASS
Ja tutaj nie widzę żadnego headera, gdzie on jest i w jakim kontekściequestionmark.gif
zaba12
  1. <?php
  2. function edit_n_ok()
  3.  
  4. {
  5.  
  6. global $tytul,$text,$data,$zrodlo,$dodal,$id;
  7. $text = nl2br($text);
  8.  
  9. $query = "UPDATE news SET tytul='$tytul', tresc='$text', zrodlo='$zrodlo' WHERE id=$id";
  10.  
  11.  $result = mysql_query($query);
  12.  
  13. header("location: index.php?cmd=1");
  14.  
  15. }
  16. ?>
oto chodzilo ? i on niedziala header ;/
TomASS
I nic wczesniej? Mysql nie wywala żadnego błedu?
zaba12
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
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
masz takie cos
  1. <?php
  2. elseif ($cmd == 'edit_n_ok') {
  3.  
  4. include ("function/newsy.php");
  5.  
  6. edit_n_ok();
  7. ?>

a w funkcji masz header()
tylko ze przed funkcja masz inculde i temu masz blad
spróbuj zamienic
  1. <?php
  2. header("location: index.php?cmd=1");
  3. ?>

na takie cos
  1. <?php
  2.  
  3. echo "<script>self.location.href=\" index.php?cmd=1\";</script>";
  4.  
  5. ?>

powinno dzialac
060156
Aby unikacj takich problemow,
mo stosowac grupe funkcji zaczynajacych
sie od prefixu ob_... poszukaj
w podreczniku php sa bardzo pomocne
zaba12
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
  1. <?php
  2. header("location: index.php?cmd=1");
  3. ?>

na takie cos
  1. <?php
  2.  
  3. echo "<script>self.location.href=\" index.php?cmd=1\";</script>";
  4.  
  5. ?>

powinno dzialac

To mi pomogło wielkie dzięki.
TomASS
  1. <?php
  2. echo "<script>self.location.href=\" index.php?cmd=1\";</script>";
  3. ?>

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
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
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
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
Cytat
narazie dopiero zdobywa doswiadczenie

Ale właśnie chciałbym kolegę nauczyć jak poprawnie i z dobrymi nawykami pisać tongue.gif

EOT z mojej strony smile.gif
phobos
jakbysmy chcieli nauczyc go dobrze pisac kod to nie powinno sie mu wpierw wypomniec to ze robi :
  1. <?php
  2. elseif(....)
  3. {
  4. inculde(...)
  5. funkcja();
  6. }
  7. elseif(....)
  8. {
  9. inculde(...)
  10. funkcja();
  11. }
  12. ?>

jak moze wczytac plik z funkcjami tylko raz na poczatku, a zamiast elseif ..... zastosowac switch()

EOT z mojej strony rowniez smile.gif
bim2
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 winksmiley.jpg a jak dasz przed <?php spacje to nie dziala smile.gif sprobuj bez entera ;P
gathor
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.