Costas K.: nachdem Code ausgeführt ist, auf index.php weiterleiten

Hi.

Ich habe eine login.php. Was in der Datei vor sich geht hat nichts mit meinem Problem zu tun. Ich würde nur gerne, nachdem dieser PHP-Code abgearbeitet ist, wieder auf die index.php zurückkehren.
Dazu sollte noch gesagt werden, dass dabei keine Session verloren gehen darf.
Per PHP umleiten (header) geht ja nur, wenn die Funktion am Anfang steht, bevor überhaupt etwas passiert ist. Und das trifft ja hier nicht zu.
Per <meta>-Refresh geht auch nciht, da die login.php inkludiert wird, und demnach keine html-Tags beinhaltet (sonst käme ja hinterher invalides HTML raus), sondern nur PHP-Code.

Wie also kann ich ohne meta-Refresh umleiten, nachdem Code ausgeführt wurde?

Danke für eure Hilfe
Costas

  1. Hello,

    Per PHP umleiten (header) geht ja nur, wenn die Funktion am Anfang steht, bevor überhaupt etwas passiert ist. Und das trifft ja hier nicht zu.

    Wer sagt das?

    Du kannst soviel Script ausführen lassen, bis gerade kein Timeout kommt...

    Du darft nur keine (weiteren) Ausgaben machen, insbesondere nicht, bevor Du den Location-Header eingetragen hast. Durch diesen wird der Browser dann zum Neuladen der Seite aufgefordert. Außerdem bekommt er in der Response auch den Cookie für die Session mitgeteilt, sollte die eben gerade begonnen woren sein.

    In der Sesssion kannst Du die Daten vermerken, die von Deiner index.php nun angezeigt werden sollen.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hi

      Per PHP umleiten (header) geht ja nur, wenn die Funktion am Anfang steht, bevor überhaupt etwas passiert ist. Und das trifft ja hier nicht zu.
      Wer sagt das?

      Das PHP-Manual:http://de.php.net/manual/de/function.header.php

      "Beachten Sie, dass header() aufgerufen werden muss, bevor eine Ausgabe gesendet wurde, egal ob dies normale HTML Tags, leere Zeilen in einer Datei oder von PHP sind. Ein weit verbreiteter Fehler ist, mittels include(), require() oder anderen Dateizugriffsfunktionen Code zu lesen, und so unbewusst Leerzeichen oder Leerzeilen auszugeben, bevor header() aufgerufen wird. Das gleiche Problem besteht auch bei Verwendung einer einzigen PHP/HTML Datei."

      Du kannst soviel Script ausführen lassen, bis gerade kein Timeout kommt...

      Bis _kein_ Timeout kommt? Was heißt das? Was hat ein Timeout mit dem header zu tun?

      Du darft nur keine (weiteren) Ausgaben machen, insbesondere nicht, bevor Du den Location-Header eingetragen hast.

      Ja also. Und das hab ich doch getan.

      Durch diesen wird der Browser dann zum Neuladen der Seite aufgefordert. Außerdem bekommt er in der Response auch den Cookie für die Session mitgeteilt, sollte die eben gerade begonnen woren sein.

      Durch das Ausführen der header()-Funktion nachdem Text ausgegeben wurde wird die Seite neu geladen?
      Und gleichzeitig wird ein Cookie übertragen? Was soll das denn? Ist doch kein Sinn dahinter.

      In der Sesssion kannst Du die Daten vermerken, die von Deiner index.php nun angezeigt werden sollen.

      Und das natürlich nur wenn header() _nach_ irgendwelchen Ausgaben steht. Also, wozu sagst du mir das alles?

      Costas

      1. Hello,

        Du kannst soviel Script ausführen lassen, bis gerade kein Timeout kommt...

        Bis _kein_ Timeout kommt? Was heißt das? Was hat ein Timeout mit dem header zu tun?

        Wenn das Timeout kommt, wird kein Header mehr gesendet, wenn er nicht vorher schon weg war. Aber darauf hast Du (fast) keinen Einfluss. Das regelt der Webserver selber.

        Du darft nur keine (weiteren) Ausgaben machen, insbesondere nicht, bevor Du den Location-Header eingetragen hast.

        Ja also. Und das hab ich doch getan.

        Wieso hast Du das getan?
        Ein PHP-Script muss keine Ausgaben machen.
        Oder wie meinst Du das?

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

  2. echo $begrüßung;

    Per PHP umleiten (header) geht ja nur, wenn die Funktion am Anfang steht, bevor überhaupt etwas passiert ist. Und das trifft ja hier nicht zu.

    Da verwechselst du etwas. header() (und auch session_start() (was ebenfalls die HTTP-Header beeinflusst)) muss nicht am Anfang, sondern nur vor jeglicher Ausgabe stehen. Mit Ausgaben sind hier gemeint:

    • Dinge, die nicht innherhalb <?php ?> stehen
    • das was Befehle wie echo, print usw. erzeugen
    • Fehlermeldungen

    Datenbankabfragen, Dateioperationen usw. können vor header() beliebig viele stattfinden, solange sie keine Ausgaben erzeugen, und sie beendet sind, bevor max_execution_time zuschlägt.

    Sollte der Programmablauf überhaupt nicht so umgeschrieben werden können (was nur in den wenigsten Fällen nicht geht), dass Ausgaben erst nach header() usw. stattfinden, dann kann man immer noch die Output Control Functions verwenden, um die Ausgabe abzufangen.

    echo "$verabschiedung $name";