Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Cannot modify header...
Forum PHP.pl > Forum > Przedszkole
Lee
Mam taki kod strony:
  1. <?php
  2. include ('config.php');
  3. include ('functions.php');
  4. session_register('is_admin');
  5.  
  6. echo '<html><head>
  7. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  8. <meta name="Keywords" content="'.$keywords.'">
  9. <meta name="Description" content="'.$description.'">
  10. <meta http-equiv="Content-Language" content="'.$lang.'">
  11. <meta http-equiv="Reply-to" content="'.$email.'">
  12. <meta name="Author" content="'.$nick.'">
  13. <title>'.$title.' - '.$slogan.'</title>
  14. <link rel="stylesheet" href="style.css" type="text/css">
  15. </head><body>
  16.  
  17. <table align="center" cellspacing="0" cellpadding="0" style="border: 1px solid black; width: 800px;">
  18.  <tr>
  19.  <td class="title" align="center" colspan="3">'.$title.' '.$slogan.'</td>
  20.  </tr>
  21.  <tr>
  22.  <td class="lmenu" align="left" valign="top">';print LeweMenu(); echo '</td>
  23.  <td class="cmenu" align="center" valign="top"><br>';
  24.  // Jeżeli niezalogowany
  25.  if (empty($_SESSION['nick'])){
  26.  print PanelLogowania();
  27. }
  28. // Po wylogowaniu
  29.  if (!empty($_GET['action']) && strip_tags($_GET['action']) == 'wyloguj'){
  30.  print PanelWylogowywania();
  31.  header('Location: administracja.php');
  32. }
  33.  
  34.  echo '</td>
  35.  <td class="rmenu" align="left" valign="top">';print PraweMenu(); echo '</td>
  36.  </tr>
  37. <tr>
  38.  <td class="copyright" align="center" colspan="3">'.$copyright.'</td>
  39.  </tr>
  40. </table></body>
  41. </html>';
  42. ?>

i po wylogowaniu (spełniony warunek drugi) wywalia mi taki error;
Cytat
Warning: Cannot modify header information - headers already sent by (output started at /home/gothic/www/my_cms/administracja.php:24) in /home/gothic/www/my_cms/administracja.php on line 33

co mam zmienić :|
Kuziu
Zobacz czy nie masz żadnych znaków przed pierwszym <? w głównym pliku i w pierwszej linii wpisz ob_start(); zaraz po <?php
Lee
okej wpisałem to ob_start(); w config.php i tym pliku co kod na górze podałem i działa

btw. co oznacza takie coś
  1. <?php
  2. Warning: Unknown(): Your script possibly relies on a session side-effect which existed until php 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
  3. ?>

czasami mi wywala (btw. nie mam dostepu do pliku php.ini, bo cms robie na stronie sponsora)
Master Miko
Wejdź sobie na manuala i poczytaj o sesjach.

Sesje: http://php.net.pl/manual/pl/ref.session.php

szczególnie o parametrach:

session.bug_compat_42
session.bug_compat_warn

je można włączyć/wyłączyć bez dostępu do ini.

http://php.net.pl/manual/pl/function.ini-set.php

A poza tym możesz zawsze na swojej maszynie postawić php + mysql i żaden sponsor potrzebny nie będzie... smile.gif
TomASS
Zobacz. Masz taki kod 'przerabiany' gdy się wylogowujesz:

  1. <?php
  2. if (!empty($_GET['action']) && strip_tags($_GET['action']) == 'wyloguj'){
  3. print PanelWylogowywania();
  4. header('Location: administracja.php');
  5. }
  6. ?>

I teraz tak. Funkcja PanelWylogowywania(); zapewne coś zwraca i bez różnicy czy jest to jakiś znacznik spacja czy enter - cokolwiek zwraca a Ty to 'printujesz' - jeśli nie to pokaż tą funkcję. Następnie robisz 'przekierowanie' na strone administracja.php (header('Location: administracja.php')winksmiley.jpg i dlatego jest błąd - przed headerem nic nie może być wysłane do przeglądarki - nic. Zresztą po co coś wysyłać jak i tak zaraz nastąpi przekierowanie? smile.gif
Albo usuń wyświetlanie z funkcji PanelWylogowywania(); (retrurn) albo usuń print albo pozbądź się headera. Jeśli nie będziesz umiał sam sobie poradzić to pokaż tą funkcję
Master Miko
Ja na przykład przy wylogowaniu używam czegoś takiego:

Tworze mały box informacyjny "Wylogowałeś się" i dodaję do tego przez meta - tag przekierowanie na inną stronę (po np. 2 sekundach) ładnie to wygląda - i jest praktycznie

Tak samo robie z logowaniem (Zalogowałeś się) oraz informacje gdy występuje niepoprawne hasło (Niezalogowany)
Lee
macie tą funkcje PanelWylogowywania
  1. <?php
  2. Function PanelWylogowywania(){
  3.  
  4. unset($_SESSION['nick']);
  5. echo '<table cellspacing="3" cellpadding="0" align="left"><tr><td><p class="text" align="center">Zostałeś wylogowany</p></td></tr></table>';
  6. }
  7. ?>
TomASS
wyrzuć 'echo....' z:
  1. <?php
  2. Function PanelWylogowywania(){
  3. unset($_SESSION['nick']);
  4. echo '<table cellspacing="3" cellpadding="0" align="left"><tr><td><p class="text" align="center">Zostałeś wylogowany</p></td></tr></table>';
  5. }
  6. ?>


ablo header('Location: administracja.php') z:
  1. <?php
  2. if (!empty($_GET['action']) && strip_tags($_GET['action']) == 'wyloguj'){
  3. print PanelWylogowywania();
  4. header('Location: administracja.php');
  5. }
  6. ?>


Po co wyświetlać 'zostałeś wylogowany' jak odrazu ma nastąpić przekierowanie na stronę administracja.php. Chyba, że użyjesz sposobu Master Miko
Lee
z tym wylogowaniem to zrobiłem jak Master Miko proponował
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.