Cookie Problem - Cannot modify header...

CrushLog

Erfahrenes Mitglied
Hallo,

ich verwende schon seit einiger Zeit immer den selben Login. für Seiten die ich mache, ändere nur die Cookie Informationen usw.
Nun hab ich aber ein Problem und weiss nicht woran es liegen soll:
Beim einloggen sagt er mir folgenden Fehler:

Code:
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w0063995/mylogin.php:58) in /www/htdocs/w0063995/mylogin.php on line 62

Obwohl er aber keine Header Informationen in dieser Datei vorher setzt.

Ich poste den Login hier mal:

PHP:
<?

//Includes
include("./inc/config.inc.php");

#Passwort übernehmen
$pass 		= $_POST['pwd'];
#Loginname = email
$email 		= $_POST['email'];
#href übernehmen
if($_POST['href']) { $href = $_POST['href']; }
else { $href = FALSE; }

#Loginname vergessen
if(!$email && $pass) {
	@setcookie("xxx", "", time()-3600);

	echo"
	<script language=\"JavaScript\">
	url=(\"./login-11\");
	window.location=url
	</script>
	";
}
#Passwort vergessen
elseif($email && !$pass) {
	@setcookie("xxx", "", time()-3600);

	echo"
	<script language=\"JavaScript\">
	url=(\"./login-12\");
	window.location=url
	</script>
	";
}
#Loginname und Passwort vergessen
elseif(!$email && !$pass) {
	@setcookie("xxx", "", time()-3600);

	echo"
	<script language=\"JavaScript\">
	url=(\"./login-13\");
	window.location=url
	</script>
	";
}

#Wenn alles eingegeben wurde
else {

	$pws = mysql_query("SELECT * FROM $l_users", $mysql_open);
	while($values=mysql_fetch_array($pws)) {
		$loginvalues[$values['email']] = $values['password'];
	}
	#Passwort stimmt
	if(md5($pass) == $loginvalues[$email]) {
		$abfrage 	= mysql_query("SELECT level FROM $l_users WHERE email = '$email'", $mysql_open);
		$row 		= mysql_fetch_object($abfrage);
		
		$cook		= $_POST['email'].",".'LOGINenable'.",".$row->level;

		setcookie("xxx", $cook, time()+(3600*24*365));
		
		if($href != FALSE) {

			echo"
			<script language=\"JavaScript\">
			url=(\"./$href\");
			window.location=url
			</script>
			";
		
		}
		
		elseif($href == FALSE) {
		
			echo"
			<script language=\"JavaScript\">
			url=(\"./\");
			window.location=url
			</script>
			";
		
		}
		
	}
	#Passwort stimmt NICHT
	else {
		@setcookie("xxx", "", time()-(3600*24*365));
		echo"
		<script language=\"JavaScript\">
		url=(\"./login-2\");
		window.location=url
		</script>
		";
	}
	mysql_close();

}

?>

Da ich nicht genau weiss wo er sonst noch header informationen senden sollte, bräuchte ich mal wieder einen Rat von euch, woran es liegen könnte.
Zur Vorgehensweise des Logins:
per Form werden die Daten weitergegeben und dann halt weitergeleitet.
Meine Überlegung war schon, dass es eventuell etwas mit dem mod_rewrite zu tun haben könnte, den ich verwende, aber ich denke eigentlich nicht, dass es damit etwas zu tun haben könnte.
Als weiteres: die Seite funktioniert zu Hause auf meinem lokalen Apache wunderbar, der Fehler tritt nur bei Webspace von all-inkl.com auf.

Mal wieder Danke im voraus!
 
PHP setzt nicht unbedingt Header-Informationen. Aber dein Webserver hat dies sicherlich getan, nachdem in Zeile 58 die erste Ausgabe erfolgte und der Header vorangesendet wurde. Der Versuch in Zeile 62, zusätzliche Header-Informationen hinzuzufügen, schlägt somit logischerweise fehl.

Such einfach in diesem Forum oder im Internet nach der Fehlermeldung um nähere Informationen und Problemlösungen dazu zu bekommen.
 
setcookie() definiert ein mit den HTTP Header-Informationen zu übertragendes Cookie.
Soweit die Doku ...

Wenn vorher bzw. mitten drin noch ECHO-Ausgaben erfolgen, kann das nicht gehen.

http://php.net/setcookie
 
Außer man Puffert die Ausgabe mittels ob_start() und schickt den gesamten Puffer am Ende des Scripts mittels ob_end_flush().
 
Ergänzung zu CIX88:
php.net hat gesagt.:
... bevor Sie eine Ausgabe, dazu zählen auch <html>- oder <head>-Tags sowie jede Art von Whitespaces, übermitteln.
Jedes Zeichen außerhalb von den PHP-Tags führt zu einer Ausgabe, auch leere Zeilen und Leerzeichen.

Ich tippe in Deinem Fall mal auf eine Fehlermeldung von mysql_fetch_object.

Gruß hpvw
 
Ich danke euch allen!

Wie header geschickt werden und das keine Whitspaces und keine jegliche Ausgabe vorher sein darf, weiss ich ja, nur ich hab mich halt gewundert, da es lokal bei mir ja keine Probleme gab.

Ich tippe in Deinem Fall mal auf eine Fehlermeldung von mysql_fetch_object.

Und genau das war der Fehler.
Kannst du mir auch erklären, was genau dort passiert sein kann? Level war in dem Table übrigens nicht enthalten, weil ich es ausnahmsweise bei dem login nicht gebraucht habe. Er hat es aber trotzdem auslesen wollen. Durch die schnelle Weiterleitung hab ich es auch erst gesehen, als ich auch die Meldung mit der header information bekommen hab. Vorher hab ichs schlicht weg vergessen, dass es im Table keine level gibt :D
 
Du hast Level doch in der Projektion!? Wenn Du es angibst, wird MySQL versuchen, es auszulesen und einen Fehler produzieren, wenn das Feld nicht existiert. Der Fehler macht sich dann bemerkbar, wenn Du den Rückgabewert (hier false und keine Ressource-Id) weiterverarbeiten willst.

Gruß hpvw
 
Zurück