ERLEDIGT
JA
JA
ANTWORTEN
28
28
ZUGRIFFE
1269
1269
EMPFEHLEN
-
19.09.09 19:58 #1
Hallo zusammen,
ich koche geradezu vor Verzweiflung und Wut. Folgendes Script:
login.phpWie 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.PHP-Code:<?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();
?>
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
-
19.09.09 21:13 #2
$_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.KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
20.09.09 18:58 #3
Nein das hat leider nichts geholfen...
Weiß vielleicht noch irgendjemand was da sonst falsch sein könnte?
lg
-
20.09.09 19:09 #4Dann verrate uns mal, was er hier ausgibt.PHP-Code:
<?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();
?>KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
20.09.09 19:39 #5
das liefert "int(1)".
-
21.09.09 16:00 #6
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
-
21.09.09 23:31 #8
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.phpPHP-Code:<?php
ob_start ();
session_start ();
session_unset ();
session_destroy ();
header("Location: [..]");
ob_end_flush ();
?>
-
25.09.09 14:18 #9
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.
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...
Ich verstehs einfach nicht...
-
27.09.09 11:21 #10
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
-
Ja geht, aber ein Header ist ein Header ist ein Header. Das sollte gehen.
Hauptsache es wird keine Ausgabe gemacht, sonst verhalten sich manche Browser denkbar komisch.PHP-Code:header("Location: http://".$_SERVER['SERVER_NAME']."/index2.php?fehler=1", true, 301);
exit();
Kannst du eine .zip bereitstellen, damit das andere Lokal testen können? (Ohne DB etc.)Geändert von ZodiacXP (27.09.09 um 12:05 Uhr)
Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
-
27.09.09 12:21 #12
Nein, das hat leider auch nichts geholfen

Und was mich noch immer so stutzig macht, ist, dass beim Aufruf von intern.php mit neuen GET-Parametern die Seite (meistens) auch erst nach dem Aktualisieren angezeigt wird. Eine simple Navigation mit get...und es funktioniert auch nicht...
Ich werde ein zip erstellen und es dann posten.
-
27.09.09 20:14 #13
Also hier der Source-Code im zip-container.
Mir ist jetzt noch aufgefallen, im IE7 und 8 funktionierts tadellos. Hab in diesen Files die unwichtigen Sachen natürlich rausgenommen, die Änderungen sollten eigentlich nichts am Problem geändert haben. Hab aber mal probeweise die login.php einfach so aufgerufen (user und passwort hab ich nicht per Post wie normal, sondern direkt im File angegeben) und die Weiterleitung zur intern.php hat im IE 6 prima funktioniert. Dann hab ich wieder die normale Login-Seite genommen, die Parameter wurden wieder per Post übergeben, und es hat schon wieder nicht funktioniert. Kann es sein, dass es nicht funktioniert, weil hier auf die login.php weitergeleitet wird, der Browser irgendwie noch nicht alles verarbeitet hat und plötzlich kommt schon die header() Anweisung, und dass ihn eben das aus der Bahn wirft?
Verflixtes Ding...
lg
-
30.09.09 11:07 #14
Also jz steht die Welt nicht mehr lange...
Das ist der Beginn der intern.php:
Wie bereits mehrmals beschrieben gibt er beim Aufruf dieser Seite (bzw. wenn auf sie von der login.php weitergeleitet wird) nichts aus.PHP-Code:<?php session_start();
if (!isset($_SESSION["user_id"]))
{
header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php", true, 301);
exit();
} else {
$t = time();
if(($_SESSION["last_action"] + 900) < $t) //15 Minuten
{
header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php", true, 301);
exit();
} else {
$_SESSION["last_action"] = $t;
}
}
echo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]
ABER: Wenn ich nur etwas wie das z.B. einfüge:
Dann gibt der IE (6) "Hallo" aus und sonst NICHTS!PHP-Code:<?php session_start();
if (!isset($_SESSION["user_id"]))
{
header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php", true, 301);
exit();
} else {
$t = time();
if(($_SESSION["last_action"] + 900) < $t) //15 Minuten
{
header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php", true, 301);
exit();
} else {
$_SESSION["last_action"] = $t;
}
}
echo 'hallo'; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
echo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]
Der hört quasi vor dem wirklichen Teil der Seite einfach auf...
Wie gesagt, nach Aktualisierung zeigt er alles an, aber WARUM?
-
Deine Zip kann man natürlich nicht testen, da sie keine Login-Daten enthält und insgesamt etwas zu fehlen scheint.
Im Quelltext steht nichts? Bei welchem Aufruf (direkt ohne Session, direkt mit gültiger Session, direkt mit abgelaufener Session)? Ohne oder mit abgelaufener musst du daran denken, dass er weiterleitet, eventuell auf eine leere Seite.
Das Hallo davor macht die Seite natürlich invalide. Vielleicht etwas im Markup, dass IE erst beim zweiten Durchlauf versteht? Teste nur das Markup in einer einfachen .htmGebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)
Ähnliche Themen
-
echo-Anzeigen dann header('Location') ob_start() Problem
Von dwex im Forum PHPAntworten: 8Letzter Beitrag: 02.11.09, 20:41 -
IE Problem mit header-location
Von Hattrix im Forum PHPAntworten: 6Letzter Beitrag: 11.07.07, 15:02 -
header("location... Problem
Von Katzehuhn im Forum PHPAntworten: 7Letzter Beitrag: 19.06.05, 13:15 -
Problem mit: Header("Location: main.php");
Von NetPerformance im Forum PHPAntworten: 6Letzter Beitrag: 10.02.05, 21:33 -
header ("Location: ..") - Problem (Serverproblem?)
Von davec im Forum PHPAntworten: 14Letzter Beitrag: 16.09.04, 02:36





Zitieren


Login






[PHP] [Codeschnipsel] ImageColor aus HTML-Farbcodierung erstellen