kostenloser Webspace werbefrei: lima-city


"PHP"- Befehl "Header" funktioniert nicht! Ideen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    zasa

    zasa hat kostenlosen Webspace.

    Hallo zusammen,

    ich will eine Umleitung auf die Loginseite erreichen, wenn der User sich noch nicht eingeloggt hat. Jedoch wird der Befehl Header nicht erkannt. Hier ist mein Quellcode:

    <?php
    session_start();
    ?>

    <?php
    if(!isset($_SESSION['username']))
    {header ("Location: http://zasa.lima-city.de");
    exit;
    }
    ?>

    Hat jemand eine Idee, woran das liegen könnte oder kennt jemand einen anderen direkten Umleitungsbefehl?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Gibt es eine Fehlermeldung?
    Findet vor der Header()-Anweisung bereits eine Ausgabe statt? Wenn ja, dann liegt es daran.
    Das exit; in der if kannst du meines Wissens nach weglassen...

    Zur Anzeige von Fehlermeldungen lege eine .htaccess-Datei auf deinem Webspace mit folgendem Inhalt:
    php_value display_errors 1



    Beitrag zuletzt geändert: 14.2.2012 19:45:15 von alfr3d
  4. zasa schrieb:
    Hallo zusammen,

    ich will eine Umleitung auf die Loginseite erreichen, wenn der User sich noch nicht eingeloggt hat. Jedoch wird der Befehl Header nicht erkannt. Hier ist mein Quellcode:

    <?php
    session_start();
    ?>

    <?php
    if(!isset($_SESSION['username']))
    {header ("Location: http://zasa.lima-city.de");
    exit;
    }
    ?>

    Hat jemand eine Idee, woran das liegen könnte oder kennt jemand einen anderen direkten Umleitungsbefehl?


    Ich weiß nicht, in wie weit das einen Unterschied macht, aber setz mal die geschweifte Klammer einen nach oben.. Und das exit; brauchst du nicht, da du mit der header den Code sowieso verlässt...

    <?php 
          session_start();
    ?> 
    
    <?php
         if (!isset($_SESSION['username'])) {
            header ("Location: http://zasa.lima-city.de");   
            } 
    ?>


    Außerdem bräuchten wir vielleicht mal den vorherigen Code, indem du die Session setzt...
  5. Klammern machen definitiv keinen Unterschied.

    Meine Vermutung ist viel mehr, wie bereits erwähnt, dass zwischen den beiden PHP-Blöcken irgendwelche Ausgabe in Form von HTML statt findet.
    Falls dies nicht der Fall ist, erscheint dann eine Fehlermeldung?
    Und lass dir doch mal bitte $_SESSION['username'] in der Zeile vor der If-Anweisung ausgeben...


    Beitrag zuletzt geändert: 14.2.2012 20:12:35 von alfr3d
  6. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    alfr3d schrieb:
    Klammern machen definitiv keinen Unterschied.

    Meine Vermutung ist viel mehr, wie bereits erwähnt, dass zwischen den beiden PHP-Blöcken irgendwelche Ausgabe in Form von HTML statt findet.
    Falls dies nicht der Fall ist, erscheint dann eine Fehlermeldung?
    Und lass dir doch mal bitte $_SESSION['username'] in der Zeile vor der If-Anweisung ausgeben...


    Da findet definitiv eine Ausgabe statt, wenn auch nicht HTML. Aber die leere Zeile die zwischen den beiden Blöcken ist wird definiv ausgegeben, danach funktioniert header() halt nicht mehr. Am besten also alle Anweisungen in einen Block schreiben, oder zumindest die Leerzeile dazwischen entfernenen (wobei ich mir nicht sicher bin, ob das reicht).
  7. zasa schrieb:
    ... Hat jemand eine Idee, woran das liegen könnte oder kennt jemand einen anderen direkten Umleitungsbefehl?
    dein code (wie von dir gezeigt) funktioniert einwandfrei. es muss einen anderen grund geben! du solltest es beherzigen, was
    alfr3d schrieb:
    Gibt es eine Fehlermeldung?
    Findet vor der Header()-Anweisung bereits eine Ausgabe statt? Wenn ja, dann liegt es daran.
    Das exit; in der if kannst du meines Wissens nach weglassen...

    Zur Anzeige von Fehlermeldungen lege eine .htaccess-Datei auf deinem Webspace mit folgendem Inhalt:
    php_value display_errors 1

    bis auf die kleinigkeiten:
    1. wenn ausgabe stattfindet (was an sich nicht sollte), ist kein problem, wenn du output_buffering verwendest (ein muss dessen liegt aber sicher an der nicht korrekt-logischen aufbau des scripts)
    2. ein exit nach header("Location: ...") wegzulassen quält den server! warum? zitat von php.net:
    After sending the `Location:' header PHP _will_ continue parsing, and all code below the header() call will still be executed. ...}
    was kurz heißt: nach dem sprung zu location, arbeitet der parser den ganzen schmus unbeirrt weiter bis zum schluss ab, was eigentlich unter resourcenverschwendung fällt ;)

    kill-a-teddy schrieb:
    ... Ich weiß nicht, in wie weit das einen Unterschied macht, aber setz mal die geschweifte Klammer einen nach oben.. Und das exit; brauchst du nicht, da du mit der header den Code sowieso verlässt...

    1. klammer hin, klammer her: das ist programmiererkonvention. den ganzen php-schmus kannst - bis auf wenige ausnahmen - in eine zeile schreiben (ganz wie js ;)
    2. exit -> siehe vorher.

    kochmarkus schrieb:
    ... Da findet definitiv eine Ausgabe statt, wenn auch nicht HTML. Aber die leere Zeile die zwischen den beiden Blöcken ist wird definiv ausgegeben, danach funktioniert header() halt nicht mehr. Am besten also alle Anweisungen in einen Block schreiben, oder zumindest die Leerzeile dazwischen entfernenen (wobei ich mir nicht sicher bin, ob das reicht).

    1. die leere zeile ist definitiv keine ausgabe - leider ;)
    2. 'alle anweisungen in einen block' ist gold richtig! ich frage mich seit ewigkeiten: warum überhaupt noch ein block außer ein block? alle blöcke, die vermutlich irgendwas ausgeben, sind für mich fehl am platz. man sollte die ganze seite mit php generieren und am ende die ganze seite mit echo o. von mir aus mit exit(''.$site); o. so ausgeben. damit ist spaghetticode die vergangenheit! (jeder code mit nur 2 echos ist spaghetticode! vom mehr echos will ich gar nicht erst sprechen)

    zusammengefasst:
    <?php
    session_start();
    ?>
    
    <?php
    if(!isset($_SESSION['username'])) {
      header ("Location: http://zasa.lima-city.de");
      exit;
    }
    
    echo 'HERE ;)';
    habe ich ohne fehler getestet (von mir local, ohne output_buffering - siehe oben)

    was ich aber für deinen testgang vorschlage ist:
    <?php
    error_reporting(E_ALL | E_STRICT);
    // dazu brauchst du noch unter lima:
    // .htaccess im root_ordner mit der zeile: 'php_value display_errors 1'
    // wie @alfr3d schrieb
    
    session_start();
    
    if(!isset($_SESSION['username'])) {
      header ("Location: http://zasa.lima-city.de");
      exit;
    }
    
    echo 'HERE ;)';
    und dann hast du die ganze palette von php-meldungen, die du momenten offensichtlich nicht hast!
  8. Autor dieses Themas

    zasa

    zasa hat kostenlosen Webspace.

    Wahnsinn so klappt es tatsächlich :D. Ich hatte außer meinem Code (siehe Themenanfang) nichts weiteres in der Datei und selbst das hatte nicht funktioniert. Auch habe ich keinerlei Fehlermeldung erhalten. Mir wurde einfach nur eine leere Seite angezeigt. Sofern echos angehangen wurden, wurden diese gezeigt, aber eine Weiterleitung hat werder in Chrome noch IE gefunzt. Da offensichtlich keine Ausabe stattgefunden hat, muss es an den Blöcken gelegen haben. Warum, keine Ahnung....

  9. Da waren i-wo leerzeichen.

    Am besten einen Editor benutzen wo ein rtrim beim speichern ausgeführt wird, damit die möglichen leerzeichen entfernt werden.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!