Übliches header:location Problem

Dörti.Hermi

Erfahrenes Mitglied
Hallo zusammen,

ich koche geradezu vor Verzweiflung und Wut. Folgendes Script:
login.php
PHP:
<?php ob_start();

session_start();
error_reporting(E_ALL);

$connectionid = mysql_connect ("localhost", "user", "pwd");
mysql_select_db ("db", $connectionid);

$sql = "SELECT ID, user, pwd FROM users WHERE (user like '".$_POST["user"]."') AND (pwd = '".md5($_POST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{ 
  $data = mysql_fetch_array ($result);

  $_SESSION["user_id"] = $data["ID"];
  $_SESSION["user_name"] = $data["user"];

  header ("Location: http://".$_SERVER['HTTP_HOST']."/intern.php");
  exit();
 
} else { 
  header ("Location: http://".$_SERVER['HTTP_HOST']."/index2.php?fehler=1");
  exit();
} 
mysql_close($connectionid);
ob_end_flush();
?>

Wie ihr seht ein einfaches Login-Script. Funktioniert im FF wunderbar, im IE (6) aber nicht. Dort wird man nicht automatisch weitergeleitet, sondern es erscheint einfach eine weiße Seite. Aktualisiert man die Seite einfach, so kommt man dann endlich zum Ziel. Ich habe schon stundenlang diverse Foren durchforstet und auch viele Lösungen für dieses Problem gefunden, nur leider hat keine bei mir geholfen.
Ich habe es mit dem output-buffer probiert, auf nicht-beabsichtigte Ausgaben (inkl. Leerzeichen) geachtet, das exit(); hinzugefügt, auf die richtige Syntax geachtet usw.

Entweder es passt noch immer irgendwas nicht, oder ich sehe den Wald vor lauter Bäumen nicht mehr. Bitte um Hilfe.

Danke, Lg Andi
 
$_SERVER['HTTP_HOST'] ist die falsche Variable für dein Vorhaben.

Ich würde da eher $_SERVER['SERVER_NAME'] verwenden.
Dieser wird nämlich vom Server her bestimmt, während $_SERVER['HTTP_HOST'] auch leer sein kann. Es wird im HTTP Request bestimmt und ist somit browserabhängig, wie du ja schon erfahren hast.
 
PHP:
<?php ob_start();

session_start();
error_reporting(E_ALL);

$connectionid = mysql_connect ("localhost", "user", "pwd");
mysql_select_db ("db", $connectionid);

$sql = "SELECT ID, user, pwd FROM users WHERE (user like '".$_POST["user"]."') AND (pwd = '".md5($_POST["pwd"])."')";
$result = mysql_query ($sql);

var_dump(mysql_num_rows($result));

/*
if (mysql_num_rows ($result) > 0)
{ 
  $data = mysql_fetch_array ($result);

  $_SESSION["user_id"] = $data["ID"];
  $_SESSION["user_name"] = $data["user"];

  header ("Location: http://".$_SERVER['HTTP_HOST']."/intern.php");
  exit();
 
} else { 
  header ("Location: http://".$_SERVER['HTTP_HOST']."/index2.php?fehler=1");
  exit();
} */
mysql_close($connectionid);
ob_end_flush();
?>

Dann verrate uns mal, was er hier ausgibt.
 
Hallo, noch eine kleine Zusatzinfo, ist mir gerade aufgefallen:
Im Quelltext (sowohl IE als auch FF) finden sich auf der intern.php-Seite (also auf der Seite, auf die nach login.php verlinkt wird) zwei Leerzeilen am Anfang. Sollte doch eigentlich nicht sein oder? Ist das vielleicht die Ausgabe, die das korrekte Funktionieren der header()-Fkt. verhindert?
 
Ich weiß nicht genau, ob das Problem bei dir das selbe ist. Aber ich hatte auch mal ein Header Problem. Das Ende des Liedes war, ich musste die Datei mit einem anderen Editor öffnen, weil sich da ständig komische Symbole einschleichen. (Dazu geht auch Word)

Ich nahm die Zeichen raus und schwups ging mein Login-Script.

Vielleicht ist das bei dir Ähnlich?

Wenn nicht, ein Versuch wars wert :)
 
Hallo 2Pac,

das hab ich auch schon des Öfteren gelesen, hat aber leider nichts geholfen. Bei mir waren auch keine komischen Symbole zu sehen.
Teilweise aktualisiert der IE nicht einmal die Seite, wenn sie über ein simples Formular einfach mit neuen Parametern aufgerufen wird, auch hier hilft wieder nur aktualisieren. Das Wundersame daran ist, dass nicht überall so ist, obwohl es von der Syntax her überall gleich ist (auch auch kein header() verwendet wird).

Beim logout-Script verwende ich auch "header()", und bei dem funktionierts jetzt plötzlich...also das soll mal einer verstehen...

Nur zur Sicherheit:
logout.php
PHP:
<?php 
ob_start (); 

session_start (); 
session_unset (); 
session_destroy (); 

header("Location: [..]");
ob_end_flush (); 
?>
 
Hallo nochmal,

ich bin hier echt am verzweifeln, hab das Problem noch immer nicht gelöst. Hab jetzt zwar die zwei mysteriösen Leerzeilen am Anfang des Quellcodes (der im Browser angezeigt wird) entfernen können, was aber nicht zur Lösung des Problems führte.

Mir ist noch aufgefallen, dass es im IE MANCHMAL funktioniert, ohne irgendwelche Probleme. Und zwar dann am häufigsten, wenn ich gerade auf den Server die login.php frisch per FTP raufgeladen habe, und mich dann anschließend im IE einlogge. Dann ruft er ja von der Formularseite die login.php auf und er leitet ohne Probleme auf die intern.php weiter. Aber zwei Mausklicks später ist schon alles wieder vorbei. :mad:
Ich habe nochmal überprüft, ob in der login.php vor dem header() was ausgegeben wird, und es ist nichtmal ein Leerzeichen. Hab dazu einfach das header() auskommentiert und danach echo 'hallo'; gemacht. Aber da finden sich im Quelltext dann wirklich nur diese 5 Buchstaben, ohne Leerzeichen, -zeilen und nix. Ich bin echt ratlos.
Hab auch schon mit header("Status: 302 Moved Temporarily"); und header("Status: 301 Moved Permanently"); versucht, bringt auch nichts...:confused:

Ich verstehs einfach nicht...
 
Hallo nochmal...

mir ist es in den Sinn gekommen hier eine Browserweiche zu verwenden (<!--[if IE]>...)
Wenn die Seite mit IE geöffnet wird, erfolgen alle Weiterleitungen mit einem meta-refresh, und mit allen anderen Browsern mit header(Location...).
Ist dann zwar nicht gerade die feine englische Art, aber es würde funktionieren oder?

lg
 
Zurück