Warning: Cannot modify header information

  • Hallo mein Eventkalender gibt mir die Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at eventkalender/search.php:1) in eventkalender/search.php on line 309

    Habe am anfang den style code:

    Code
    <style type="text/css">
    html, body {margin:0; padding:0; width:100%; height:100%; overflow:hidden;}
    #background{position:absolute; z-index:1; width:100%; height:100%;}
    #scroller {position:absolute; width:100%; height:100%; top:0; left:0;overflow:auto; z-index:2;} 
    #content {padding:5px 300px 20px 200px;}
    </style>

    und on line 309:
    header ("Location: search.php?searchid=".$searchid."&mode=new&sid=".$sid);
    .
    Ich verstehel eider nicht warum er mir den Fehler gibt (stehe bischen auf dem Schlau)

    Danke schonmal im vorraus

    Einmal editiert, zuletzt von The User (27. Juli 2010 um 13:13) aus folgendem Grund: [code]-Benutzung!!

  • Vor dem header()-Befehl darf keine Ausgabe an den Browser erfolgen. Du gibst vorher ja schon Sachen aus, z.b. deine style-Definitionen.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Also soll ich dann im php script mit ob_start() den style befehl reinsetzen?
    Wie gesagt bin noch nicht so fit in php

  • Ist auch eine Möglichkeit, aber nicht sehr schön. Widerspricht halt dem EVA-Prinzip.
    Ausgaben sollten immer erst als allerletztes kommen. Dynamisch generierte Inhalte im Code-Teil werden dann halt in Variablen zwischengespeichert.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Der php Script ist jetzt am anfang, Aber ich brauch den Style auch unbedingt drinn sein.
    <?php
    ....
    header ("Location: search.php?searchid=".$searchid."&mode=new&sid=".$sid);
    ....
    ?>
    Mit welchem befehl kann ich dann den Style wiedergeben.

  • Naja, so wird es halt im output-buffer zwischengespeichert, ist auch nicht groß anders…

    Es geht ja auch um die Code-Strukturierung. Und da macht es sehr wohl einen Unterscheid ob die Ausgaben über das ganze Script/die ganzen Scripte verteilt sind, oder kompakt an einer Stelle zum Schluss.


    Am Anfang deines Scriptes fügst du ob_start() ein, wie du es ja schon gemacht hast. Am Ende deines Scriptes dann ob_end_flush().

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    2 Mal editiert, zuletzt von SinnlosS (27. Juli 2010 um 13:25)

  • kann ich eventuell jemanden die php datei schicken?
    Heut klapts bei mir nicht.

    Wäre sehr cool.

  • Du gehst in die erste Zeile der PHP-Datei und fügst ganz am Anfang „<? ob_start(); ?>“ ein. Das flush kannst du dir sparen…

    SinnlosS
    Naja, der Code wird jetzt nicht auf einmal toll, wenn man den Code in eine Variable schreibt und am Ende ein echo einfügt, da braucht es schon mehr. Aber stimmt schon, dass bei einer guten Struktur die Ausgabe in der Regel wirklich erst am Ende statfindett, z.B. bei der Template-Verarbeitung.


  • SinnlosS
    Naja, der Code wird jetzt nicht auf einmal toll, wenn man den Code in eine Variable schreibt und am Ende ein echo einfügt, da braucht es schon mehr. Aber stimmt schon, dass bei einer guten Struktur die Ausgabe in der Regel wirklich erst am Ende statfindett, z.B. bei der Template-Verarbeitung.


    Das stimmt, (HTML-)Code hat in den Variablen nichts verloren, sondern eben nur die für die Anzeige dynamisch generierten Inhalte.
    Sobald die Ausgabe beginnt sollte PHP dann nur noch als Template-Engine fungieren, und keine verarbeitenden Funktionen mehr ausführen.
    Ob man dafür dann eine Template-Engine wie Smarty nutzt, oder die Inhalte im HTML-Teil an den entsprechenden Stellen via <?php echo $var; ?> einfügt spielt keine Rolle.
    Ausgabe und Verarbeitung sollten halt einfach getrennt werden bei einer sauberen, gut wart- und erweiterbaren Struktur.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook