Przekierowanie headerem - ciągle wystepuje warning


(system) #1

Witajcie. Do tej pory nie miałem problemu z headerami, niestety teraz mam kłopot, bo w podkatalogu domeny mam zrobić mały panel do wstawiania danych klientów. Podkatalog nazywa się "www". I chodzi mi o to, że nie chce mi zadziałać logowanie.

Już w pliku index.php musiałem usunąć session_start, bo serwer się ciskał, że nie może ustawić session cookie, bo już zostało ustawione w linii 2. najsmaczniejsze jest to, że właśnie w 2 linii miałem session_start (w 1 linii bylo <?php).

Teraz includuję formularz logowania. Jego action przenosi do pliku logon.php. Niestety za nic nie moge sobie poradzić z usunięciem warninga.

Kod z pliku logon.php

<?php

ob_start();

ob_flush();

if(isset($_POST['user']) && isset($_POST['passwd']))

{

	$user = $_POST['user'];

	$passwd = $_POST['passwd'];

	switch($user)

	{

		case "a":

		{

			if($passwd == "b")

			{

				$_SESSION['admin'] = time() + 900;

			}

			break;

		}

		default:

		{

			break;

		}

	}

}

if(isset($_SESSION['admin']))

{

	header("Location: index.php?order=date");

}

else

{

	header("Location: loguj.php");

}

ob_end_flush();

?>

Dlaczego mimo że ma się wykonać część else z ostatniego warunku, to pojawia siębłąd o headerze ustawionym w linii z zapisem

header("Location: index.php?order=date");

Pozdrawiam


(Zbyszekborkowski) #2

Wykonuje się przekierowanie z ostatniego warunku, ponieważ, nie rozpoczynasz sesji (session_start()) i dlatego isset($_SESSION['admin']) zwróci false.

To, co masz w 3. linijce jest bez sensu. Rozpoczynasz buforowanie, żeby je zaraz zakończyć.

Przed wysłaniem nagłówka header() nie może być wyrzucony żaden tekst, nawet spacja. Tu zdaje się, że takiego czegoś nie ma, ale może includujesz ten plik w innym skrypcie, który wyrzuca tekst?


(kostek135) #3

Odnośnie tego co napisał absens, ewentualnie kodujesz z BOM (Byte Order Mark) wrzuca trzy niewidzialne znaki na początek tekstu, które też są traktowane jako tekst przed headerem, zmienić na UTF bez BOM.


(system) #4

Odpisuję z opóźnieniem, ale rzeczywiście, było tak jak napisał kostek135 , BOM się wpakował do środka :slight_smile: I psuł całą radość z php :smiley:

absens , racja, niepotrzebnie to tam wpisałem, ale poprawiłem sobie :slight_smile: