Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
28
ZUGRIFFE
1269
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    Hallo zusammen,

    ich koche geradezu vor Verzweiflung und Wut. Folgendes Script:
    login.php
    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();
    ?>
    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
     

  2. #2
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    $_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"

  3. #3
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    Nein das hat leider nichts geholfen...

    Weiß vielleicht noch irgendjemand was da sonst falsch sein könnte?

    lg
     

  4. #4
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    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();
    ?>
    Dann verrate uns mal, was er hier ausgibt.
     
    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"

  5. #5
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    das liefert "int(1)".
     

  6. #6
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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?
     

  7. #7
    2Pac 2Pac ist offline Mitglied Platin
    Registriert seit
    Jun 2002
    Ort
    Salzwedel
    Beiträge
    605
    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
     

  8. #8
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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-Code:
    <?php 
    ob_start 
    (); 

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

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

  9. #9
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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...
     

  10. #10
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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
     

  11. #11
    Registriert seit
    Mar 2004
    Beiträge
    1.853
    Blog-Einträge
    2
    Ja geht, aber ein Header ist ein Header ist ein Header. Das sollte gehen.
    PHP-Code:
    header("Location: http://".$_SERVER['SERVER_NAME']."/index2.php?fehler=1"true301);
    exit(); 
    Hauptsache es wird keine Ausgabe gemacht, sonst verhalten sich manche Browser denkbar komisch.

    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)

  12. #12
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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.
     

  13. #13
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    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
    Angehängte Dateien Angehängte Dateien
     

  14. #14
    Avatar von Dörti.Hermi
    Dörti.Hermi Dörti.Hermi ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Österreich
    Beiträge
    201
    Also jz steht die Welt nicht mehr lange...

    Das ist der Beginn der intern.php:
    PHP-Code:
    <?php session_start(); 
    if (!isset(
    $_SESSION["user_id"])) 
    {
         
    header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php"true301);
        exit();
    } else {
        
    $t time();
        if((
    $_SESSION["last_action"] + 900) < $t)    //15 Minuten
        

            
    header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php"true301);
            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" />
    [...]
    Wie bereits mehrmals beschrieben gibt er beim Aufruf dieser Seite (bzw. wenn auf sie von der login.php weitergeleitet wird) nichts aus.

    ABER: Wenn ich nur etwas wie das z.B. einfüge:
    PHP-Code:
    <?php session_start(); 
    if (!isset(
    $_SESSION["user_id"])) 
    {
         
    header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php"true301);
        exit();
    } else {
        
    $t time();
        if((
    $_SESSION["last_action"] + 900) < $t)    //15 Minuten
        

            
    header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php"true301);
            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" />
    [...]
    Dann gibt der IE (6) "Hallo" aus und sonst NICHTS!
    Der hört quasi vor dem wirklichen Teil der Seite einfach auf...
    Wie gesagt, nach Aktualisierung zeigt er alles an, aber WARUM?
     

  15. #15
    Registriert seit
    Mar 2004
    Beiträge
    1.853
    Blog-Einträge
    2
    Deine Zip kann man natürlich nicht testen, da sie keine Login-Daten enthält und insgesamt etwas zu fehlen scheint.

    Zitat Zitat von Dörti.Hermi Beitrag anzeigen
    Also jz steht die Welt nicht mehr lange...

    Das ist der Beginn der intern.php:
    PHP-Code:
    <?php session_start(); 
    if (!isset(
    $_SESSION["user_id"])) 
    {
         
    header ("Location: http://".$_SERVER['SERVER_NAME']."/index2.php"true301);
        exit();
    } else {
        
    $t time();
        if((
    $_SESSION["last_action"] + 900) < $t)    //15 Minuten
        

            
    header ("Location: http://".$_SERVER['SERVER_NAME']."/logout.php"true301);
            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" />
    [...]
    Wie bereits mehrmals beschrieben gibt er beim Aufruf dieser Seite (bzw. wenn auf sie von der login.php weitergeleitet wird) nichts aus.
    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.

    Zitat Zitat von Dörti.Hermi Beitrag anzeigen
    Dann gibt der IE (6) "Hallo" aus und sonst NICHTS!
    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 .htm
     
    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)

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 02.11.09, 20:41
  2. IE Problem mit header-location
    Von Hattrix im Forum PHP
    Antworten: 6
    Letzter Beitrag: 11.07.07, 15:02
  3. header("location... Problem
    Von Katzehuhn im Forum PHP
    Antworten: 7
    Letzter Beitrag: 19.06.05, 13:15
  4. Problem mit: Header("Location: main.php");
    Von NetPerformance im Forum PHP
    Antworten: 6
    Letzter Beitrag: 10.02.05, 21:33
  5. Antworten: 14
    Letzter Beitrag: 16.09.04, 02:36