Header() problem

  • So Leute, da auf php.de nur besserwisser undidioten rumlaufen versuche ich mein glück bei euch und ja ich habe ewig bei google gesucht doch hat es mein problem nicht gelöst.....

    Ich arbeite so, dass ich eine header.php und eine footer.php habe wo die ganzen HTMLdaten stehen und dazwischen ist dann mein PHP code. Ich möchte in meinem loginscript jetzt eine weiterleitung einbauen falls die seite nicht betreten werden darf ohne eingeloggt zu sein. aber ich kriege folgenden Fehler, wenn ich per header weiterleiten will:

    Zitat:
    Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\cemgun\inc\template\header.php:11) in C:\AppServ\www\cemgun\valid_user.php on line 5
    Hier mal meine Header.php:
    PHP-Code:
    <?php session_start(); ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title>Titel</title>
    </head>

    <body>
    Das mit dem Session musste ich dort hinschreiben da ich das überall brauche wenn ichs lösche passiert das selbe.....

    Meine Datei zum checken ob der user eingeloggt ist:
    PHP-Code:
    <?php
    session_start();
    if (!isset ($_SESSION['user']))
    {
    header ("Location: index.php?section=adminlogin");
    }
    ?>
    weiß echt nicht weiter.... brauche hilfe bitte :S

    Ich kanns nicht anders weiterleiten per javascript oder sonst was, da sons timmer eine kleine vorschau sozusagen gezeigt wird und mann dann durch das abbrechen des ladens der seite in den geschützten bereich kommt-.-

    MfG
    Amar

  • Stichwort: EVA-Prinzip
    1) Eingabe
    2) Verarbeitung
    3) Ausgabe

    Nach diesem Schema soltle man alle Systeme kontruieren.

    Sobald du einen HTML-Code ausgibst, kannst du keine Header mehr schicken, weil damit die Übertragung beginnt.

    Am besten verschiebst du alle überprüfungen an den Anfang deines Quellcodes und machst am Ende eine Ausgabe.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • also ne weiterleitung via header funktioniert eben nur, wenn du bisher keinerleit output hattest.
    sobald du auch nur einen einzelnen buchstaben ausgibst isses vorbei mit header(location)

    du wirst wohl dein konzept nochmal überdenken müssen...
    es ist immer sinnvoll zuerst zu berechnen und dann deine ausgaben zu machen.


    oh da war doda ja schneller..^^
    joa das passiert wenn man im wohnzimmer liest und im schlafzimmer antwortet^^

  • OK Schonmal danke immerhin besser als das vorherige Forum wenigstens hilfreiche antworten und nicht nur benutz die SuFu -.-

    Jedenfalls ...naja scheiße iwie wa iwie muss ich das ya benutzen können gehts denn gar nicht anders ohne jetzt das komplette system zu ändern?:S

  • Wie system zu aendern? So wie ich das sehe hast du in der valid_user.php das problem, gib uns mal bitte den kompletten quellcode von valid_user.php. Und sag uns bitte auch, was in der action vom formular steht, mit dem du dich einloggst. Von der datei bitte auch den kompletten quellcode.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • der output startet schon mit dem include der header.php, wenn du die in der valid_user einbindest.. schau mal dass du des nach dem header(location) machst sonst haste eben genau dieses problem


  • Das ist die loginform^^

    die checklogin datei testet eben auf username und passwort usw. Zur sicherheitposte ich das auch mal:


    die valud_user.php ist die vollständige datei^^

    Ich hab das so gemacht immer, dass ich die header.php includet habe, wo die css datei z.b includet ist. Naja und wen ich die header.php nicht include z.b´als test dann passiert genau der selber fehlermitdem header und ich kann meine CSS datei nichtmehr verwenden :( Brauchhilfe leute ich bin grad genau am ende meinen scripts-.- das ist wirklich der letzte fehler :(

    Einmal editiert, zuletzt von synaptic (26. Dezember 2010 um 14:35) aus folgendem Grund: codetags für bessere lesbarkeit ergänzt

  • beutz bitte für weitere codes die hier geläufigen codetags, das verbessert die lesbarkeit ungemein.
    kannst du mal bitte die config (ohne sensible daten) posten?

    oder willst du deine header-weiterleitung an der stelle machen, wo das javascript liegt??

  • OK tut mi rleid wegen den Code-Tags^^
    Es soll nicht an die stelle vom Javascript, das ist da schon richtig. Es soll in die Valid_user.php dort ist es am wichtigsten.

    Nochmal die valid_user.php:

    PHP
    <?php
    session_start();
    if (!isset ($_SESSION['user'])) {
    header("Location: index.php?section=adminlogin");
    }
    ?>

    und die config.php:

  • Der logische aufbau ist schon falsch, halte dich an das EVA-Prinzip, wie dodo schon sagte. Und wenn du deshalb deine kompletten scripte umbauen musst, ist das egal. Falsch bleibt falsch, also einmal richtig machen

  • Weil du das EVA-Prinzip nicht verstanden hast. Dazu findet man mit google massenhaft infos.

  • ok da ich so keinen fehler direkt entdecke... zeig mal die index.php. bei mir festigt sich der gedanke mit der falschen reihenfolge der verarbeitung und ausgabe.

    denn scheinbar includest du die die valid_user.php nach der header.php was den fehler herbeiführt.

    mach dir mal konkrete gedanken zu dem was dodo und ich oben bereits erklärten.

  • alles klar hier die index.php:

  • Leerzeichen vor dem <?php in der index.php entfernen und bei den nachkommenden PHP Dateien die ?> entfernen kann nie schaden

    Wenn der Fehler kommt schickst du irgentetwas vor dem Header, sei es ein Leerzeichen oder eben ein echo oder eben CSS oder sonst was , dass findest du schon

    Ansonsten verwende Buffern in PHP, da wirst du sowie so nicht drumrumkommen bei einer richtigen Anwendung
    ob_start(); <- ganz oben in der index
    ob_flush(); <- ganz unten in der index


    mfg

    Einmal editiert, zuletzt von Pion (26. Dezember 2010 um 16:41)

  • PION DU BSIT EIN GENIE Danke man hat geklappt naendlich!!! habe bei deramdin.php die ?> entfernt und bei der index die genannte funktion eingefügt funktioniert. Ich kannte das schon, aber wusste nicht wohin damit-.-

    Naja vielen dank :D

  • Das ist wie gesagt schon in Ordnung, wenn du dich aber weiterentwickeln möchtest nehme das ob_start(); nocheinmal raus und schaue woher die Ausgabe kommt, dabei würdest du mehr lernen

    mfg

  • Das Output-Buffering ist hier aber nichts anderes als ein Krücke, um die mangelhafte Programmierung zu kaschieren.