Nowe posty

Autor Wątek: Problem z header('Location: index.php')  (Przeczytany 8627 razy)

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
Problem z header('Location: index.php')
« dnia: 2009-09-18, 16:30:37 »
Witam!

Męczę się z tym problemem kilka dni i nic mi nie wychodzi...
Zainteresował mnie kurs tworzenia gry czasu rzeczywistego, opublikowany w ostatniej Dragonii. Można powiedzieć że od początku były pewne drobne problemy, ale dałem sobie z nimi radę. No ale ten mnie chyba przerasta.
Otóż starając się zalogować jako gracz dostaję taki komunikat:
Cytuj
Warning: Cannot modify header information - headers already sent by (output started at /var/www/localhost/htdocs/strona/batalia/naglowek.php:15) in /var/www/localhost/htdocs/strona/batalia/logowanie.php on line 39
Chwila grzebania w sieci wskazuje winowajcę i rozwiązanie. Należy dodać na początku i na końcu skryptu funkcje:
ob_start();
ob_end_flush();
Gdzie indziej napisane było, żeby postawić znak '@' przed kłopotliwymi liniami.
Ale żadna z tych metod nie rozwiązuje problemu, nadal jest kiszka.

O co może w tym chodzić?

Edit: literówki...

Scofield

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #1 dnia: 2009-09-18, 17:12:52 »
Widzę, że tylko potrzebujesz przekierowania do index.php:
header('Location: index.php');
Możesz to zastąpić html'owym refresh'em. Np tak:
print "";

TheUsh

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #2 dnia: 2009-09-18, 18:26:31 »
Hmm ten błąd pokazuje się przeważnie, gdy w danym pliku funkcja header() znajduje się już po jakimś kodzie html'a bądź funkcji, która coś wypisuje (echo, print, itd.).
Łatwiej by było, gdybyś podesłał ten niesforny kawałek pliku ;)

tm

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #3 dnia: 2009-09-18, 20:18:54 »
Sprawdź też, czy przed

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
Problem z header('Location: index.php')
« Odpowiedź #4 dnia: 2009-09-18, 21:38:56 »
Cytat: Scofield
Widzę, że tylko potrzebujesz przekierowania do index.php:
header('Location: index.php');
Możesz to zastąpić html'owym refresh'em. Np tak:
print "";
Niestety, to nie pomaga; ciągle wraca na stronę logowania.

Nie widać żeby przed wcześniej był jakiś kod html... Tak samo przed
ob_start();
session_start();

//Sprawdzenie, czy gracz jest zalogowany.
if (!isset($_SESSION['gracz']))
 { //Gracz niezalogowany.
 //Sprawdzenie, czy przesłano dane do logowania.
 if (isset($_POST['nazwa']) && isset($_POST['haslo']))
  { //Przesłano dane do logowania.

  //Przygotowanie danych do analizy.
  $nazwaGracza=eregi_replace(' ','',$_POST['nazwa']);
  $hasloGracza=eregi_replace(' ','',$_POST['haslo']);

  //Załadowanie klasy do obsługi bazy danych.
  include('baza_danych.php');
  //Inicjowanie klasy BazaDanych.
  $bd=new BazaDanych;
  $bd->polacz();

  //Sprawdzenie, czy mamy takiego gracza w bazie danych.
  $bd->zapytaj('SELECT `id_gracza`,`gracz_poziom`,`gracz_atak` FROM `gracze` WHERE `gracz_nazwa`="'.$nazwaGracza.'" AND `gracz_haslo`="'.$hasloGracza.'" LIMIT 1');
  if ($bd->ile_rekordow()==1)
   { //Jest taki gracz.
   //Ustawienie SESSION gracz.
   $_SESSION['gracz']=$nazwaGracza;
   $dane=mysql_fetch_array($bd->wynik);
   $_SESSION['id']=$dane['id_gracza'];
   $_SESSION['poziom']=$dane['gracz_poziom'];
   $_SESSION['ostatniAtak']=$dane['gracz_atak'];

   //Przekierowanie do strony koszary.php
   header('Location: index.php');
   }
   else
   { //Nie ma takiego gracz lub podano błędne dane.
   //Przekierowanie do strony index.php
   header('Location: index.php');
   }

  //Rozłączenie z bazą danych.
  $bd->rozlacz();
  unset($bd);
  }
  else
  {   //Nie przesłano danych do logowania.
  //Przekierowanie do strony index.php
  header('Location: index.php');
  }
 }

ob_end_flush();
?>

TheUsh

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #5 dnia: 2009-09-18, 22:52:59 »
Plik z tym kodem nie jest może zagnieżdżony w innym przez include i z niego jest wywoływany? ;)
Przy okazji sprawdź co jest we wskazanych przez debuger liniach
Cytuj
Warning: Cannot modify header information - headers already sent by (output started at /var/www/localhost/htdocs/strona/batalia/naglowek.php:15) in /var/www/localhost/htdocs/strona/batalia/logowanie.php on line 39
naglowek.php:15 oznacza jakiś problem w linii 15 tego pliku, podobnie z plikiem logowanie.php, który ma problem w linii 39

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
Problem z header('Location: index.php')
« Odpowiedź #6 dnia: 2009-09-19, 13:50:26 »
w logowanie.php na 39 linii jest funkcja
header('Location: index.php');
natomiast w naglowek.php w 15 linii jest
Ten div może być powodem problemów? Wcześniej w tym pliku też jest div i nie robi on żadnych problemów...

Może załączę wszystkie pliki, które w jakiś sposób są związane z logowanie.php:

bazy_danych.php
class BazaDanych
 {
 var $bduzytkownik='root';
 var $bdhaslo='dr4gon86';
 var $bdserwer='localhost';
 var $bdnazwa='batalia';
 var $polaczenie='';
 var $wynik='';
 function polacz()
  {
  $this->polaczenie=mysql_connect($this->bdserwer,$this->bduzytkownik,$this->bdhaslo) or die('Błąd połączenia z serwerem MySQL!');
  //mysql_query('set charset latin2');
  $this->wynik=mysql_select_db($this->bdnazwa, $this->polaczenie) or die('Nie można wybrać danej bazy danych!');
  }
 function zapytaj($zapytanie)
  {
  $this->wynik=mysql_query($zapytanie, $this->polaczenie) or die('Problem z zapytaniem: '.$zapytanie);
  }
 function ile_rekordow()
  {
  return mysql_num_rows($this->wynik);
  }
 function rozlacz()
  {
  $rozlaczenie=mysql_close($this->polaczenie) or die('Błąd z rozłączeniem z serwerem MySQL!');
  }
 }
?>
index.php
session_start();

//Załadowanie nagłówka strony.
include('naglowek.php');

//Sprawdzenie, czy gracz jest zalogowany.
if (isset($_SESSION['gracz']))
 { //Gracz jest zalogowany.
 //Załadowanie powitania.
 include('powitanie.php');
 }
 else
 { //Gracz nie jest zalogowany.
 //Sprawdzenie, czy przesłano dane do logowania.
 if (isset($_POST['nazwa']) && isset($_POST['haslo']))
  { //Przesłano dane do logowania.
  include('logowanie.php');
  }
  else
  { //Nie przesłano danych do logowania.
  //Pokazanie formularza logowania.
  include('formularz_logowania.php');
  }
 }
//Załadowanie stopki strony.
include('stopka.php');
?>
naglowek.php



 
 
 
  Batalia


 
 

 
 
 
stopka.php
  

 
 

   To jest moja stopka i mogę w niej umieścić dodatkowe informacje.
 


 

 


TheUsh

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #7 dnia: 2009-09-19, 16:54:00 »
index.php ładuje plik logowanie.php już po wysłaniu mnóstwa html'a z pliku naglowek.php, dlatego wywala ci błąd ;) logowanie.php zostaw całkiem jako oddzielny plik i po prostu w formularzu logowania jako action daj logowanie.php a nie index.php .

jk33

  • Gość
Problem z header('Location: index.php')
« Odpowiedź #8 dnia: 2009-09-19, 19:04:59 »
... lub włącz buforowanie wyjścia już w index.php. (Myślę, że w tym przypadku mniej inwazyjna metoda).

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
Problem z header('Location: index.php')
« Odpowiedź #9 dnia: 2009-09-19, 23:37:01 »
Pomogło włączenie buforowania wyjścia w index.php

Dzięki za pomoc :)