Der Kniff mit der header() funktion

  • Baue gerade an einem loginskript, das je nach ausgang weichen setzt - d.h. je nachdem ob das login positiv war befördet es den user per header('Location: bla.html') auf die jeweilige seite.

    Mir ist aber aufgefallen, das ein header(Location:..) quasi kumulativ arbeitet, dh. 2 header-funktionen hintereinander und der erste header aufruf wird überschrieben/ignoriert (dachte nämlich früher immer das ein header ein quasi skriptabbruch ist und die seite sofort redirected)

    Das hat zufollge das man "relativ" umständliche if konstrukte erstellen muss so das sich ein header am absoluten ende eines statements oder des ganzen skript befindet.

    Um zu verdeutlichen was ich meine dieses Bsp:

    PHP
    if($var) {
      header('Location: 1.html');
    }
    
    
    
    
    header('Location: 3.html');

    Dieses Skript wird egal was passiert immer auf 3.html redirecten. Gibt es nun einen Kniff wie ich ein Skript sauber abschließen kann sodas nach einem header() das skript beendet wird. Mit exit() hört einfach alles auf - return() schaut mir irgendwie unsauber aus und ich weiß auch nicht obs funktioniert?

  • Zitat

    Das hat zufollge das man "relativ" umständliche if konstrukte erstellen muss so das sich ein header am absoluten ende eines statements oder des ganzen skript befindet.

    Schon klar das mans mit if else lösen kann, aber sehr umständlich. Das bsp war nur zu verdeutlichung welches verhalten ich meine und stellt nicht das problem dar.

    Wenn man nämlich 6-10 verschiedene weichen braucht und eine die eintrit wenn keines der $var pos. ausgibt (7.html) (bei versch. fehlermeldungen) wäre das.. (könnte man natürlich auch mit switch machen)

    übersichtlicher als das:

    (sorry man kann irgendwie keine gescheiten tabs machen)

    Es würden beim ersten bsp aber eben break anweisungen fehlen sodass das skript nicht mehr weitermacht nach einem header, weil sonst würde es immer auf 7.html kommen. Man musste es wie bsp2 machen sodass es gescheit funkt.

    2 Mal editiert, zuletzt von Myc0rrhizal (18. August 2008 um 13:41)

  • vielleicht so?

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • vielleicht so?

    ah, jetzt hab ichs gecheckt...

    dann würde noch die exits dazugehören:

  • natürlich exit nachm header, hab mir den kopf zermartet aber irgendwie nie das exit nachm header geschrieben...

    danke

  • ah, jetzt hab ichs gecheckt...

    dann würde noch die exits dazugehören:

    Geschwungene Klammern nicht vergessen!

  • Alter! Wenn wir gerade beim Hirnwichsen sind: Falls du die Funktion header nur zur Weiterleitung benutzt, dann programmier doch eine eigene Version:

    PHP
    function location($path) {
    	header("Location: $path");
    	exit();
    }

    Und wer logische Verknüpfungen zu Gebrauchen weiss, macht dann folgendes:

    PHP
    $var1 and location("1.html"); // entspricht if
    
    
    $var2 ? location("2.html") : location("3.html"); // entspricht if und else

    Das ist Hardcore.

  • Und wer logische Verknüpfungen zu Gebrauchen weiss, macht dann folgendes:

    PHP
    $var1 and location("1.html"); // entspricht if
    
    
    $var2 ? location("2.html") : location("3.html"); // entspricht if und else

    Das ist Hardcore.

    :D

    Das ist Hardcore, hehe, aber auch unleserlich, fehleranfaellig und schlecht wartbar, daher nicht zu empfehlen.

  • Alter! Wenn wir gerade beim Hirnwichsen sind: Falls du die Funktion header nur zur Weiterleitung benutzt, dann programmier doch eine eigene Version:

    PHP
    function location($path) {
        header("Location: $path");
        exit();
    }

    Und wer logische Verknüpfungen zu Gebrauchen weiss, macht dann folgendes:

    PHP
    $var1 and location("1.html"); // entspricht if
    
    
    $var2 ? location("2.html") : location("3.html"); // entspricht if und else

    Das ist Hardcore.

    gute idee eigentlich

  • switch war auch mein erster gedanke...

    wer if, else if und else schon umständlich findet.... gnarf

    Die if abfragen sind nicht regelmäßig genug (in der praxis) um ein switch zu rechtfertigen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!