Devous: Cannot modify header information

Moin Moin,

ich habe in dem Quelltext irgendwo einen "Cannot modify header information" Fehler. Nach ein bisschen googlen sollte irgendwo ein Leerzeichen vor oder nach einem PHP Tag sein. Habe ihn aber noch nicht gefunden. So langsam bin ich ratlos und hoffe das mir hier jemand helfen kann.

Der komplette Fehlercode:

  
Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\balzer\admin\aenderung\email.php:50) in H:\xampp\htdocs\balzer\admin\aenderung\email.php on line 101  

Schon einmal danke für eure hoffentliche Hilfe!

Gruß

  
<?php  
session_start();  
if (empty($_SESSION['Nutzer'])) {  
    header('Location: ../../public/nicht_eingeloggt.php');  
}  
?>  
<html>  
    <head>  
        <title>Fast Food - EMail Ändern</title>  
        <meta charset="ANSI">  
        <link rel="stylesheet" href="../../css/design.css" type="text/css" />  
        <link rel="stylesheet" href="../../themes/default/default.css" type="text/css" />  
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" type="text/javascript"></script>  
        <script src="../../data/jquery.nivo.slider.pack.js" type="text/javascript"></script>  
        <script type="text/javascript">  
            $(window).load(function() {  
                $('#slider').nivoSlider({  
                    controlNav: false, // 1,2,3... navigation		  
                });  
            });  
        </script>  
    </head>  
    <body>  
        <div id='statusbar'>  
            <?php  
            include("../../data/menu_status_admin.php");  
            ?>  
        </div>  
        <div id="website">  
            <div class="slider-wrapper theme-default">  
                <div class="ribbon"></div>  
                <div id="slider" class="nivoSlider">  
                    <img src="../../images/slide1.jpg" alt="" />  
                    <a href="http://dev7studios.com"><img src="../../images/slide2.jpg" alt="" title="#htmlcaption" /></a>  
                    <img src="../../images/slide3.jpg" alt="" title="This is an example of a caption" />  
                    <img src="../../images/slide4.jpg" alt="" />  
                </div>  
                <div id="htmlcaption" class="nivo-html-caption">  
                    <strong>This</strong> is an example of a <em>HTML</em> caption with <a href="#">a link</a>.  
                </div>  
            </div>  
            <div id="main">  
                <div id="menu" >  
                    <?php  
                    include("../../data/menu_admin.html");  
                    ?>  
                </div>  
                <div id="inhalt">  
                    <h2><center>&Auml;ndern Sie hier Ihre E-Mail:</center></h2>  
                    <Form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">  
                        <center><table>  
                                <tr><td>Ihre alte E-Mail: </td><td><input type="text" name="emailalt" size="16"></td></tr>  
                                <tr><td>Ihre neue E-Mail: </td><td><input type="text" name="emailneu" size="16"></td></tr>  
                                <tr><td>Wiederholen Sie die E-Mail: </td><td><input type="text" name="emailneu2" size="16"></td></tr>  
                            </table></center><br>  
                        <input type="submit" name="gesendet" value="&Auml;ndern"></center>  
  
                        <?php  
                        If (isset($_POST['gesendet'])) {  
                            $emailalt = $_POST['emailalt'];  
                            $emailneu = $_POST['emailneu'];  
                            $emailneu2 = $_POST['emailneu2'];  
  
                            include("../../data/config.php");  
  
                            if ($emailalt == "" or $emailneu == "" or $emailneu2 == "") {  
                                echo "<center>Bitte f&uuml;lle alle Felder aus.</center>";  
                            }  
  
                            $Name = $_SESSION['Nutzer'];  
  
                            $query = sprintf("Select * from account where nickname = '%s'", $Name);  
                            $ergebnis = mysql_query($query, $verbindung);  
                            if (mysql_num_rows($ergebnis) == 0) {  
                                die("<center><h2>Dieser Account exestiert nicht");  
                            }  
  
                            while ($zeile = mysql_fetch_array($ergebnis, MYSQL_ASSOC)) {  
                                $emaildb = $zeile['email'];  
                            }  
  
                            if ($emailalt != $emaildb) {  
                                die("<center><h2>Die eingegebene bisherige E-Mail ist falsch!</h2></center>");  
                            }  
  
                            if ($emailneu != $emailneu2) {  
                                die("<center><h2>Bitte &uuml;berpr&uuml;fen Sie die Eingabe der neuen E-Mail!</h2></center>");  
                            }  
  
                            if ($emailneu == $emailalt) {  
                                die("<center><h2>W&aumllen Sie ein neues Passwort, welches nicht identisch mit dem alten ist.</h2></center>");  
                            }  
  
                            $query = sprintf("UPDATE account  
                                SET email='%s'  
                                WHERE nickname='%s'", $emailneu, $Name);  
  
                            $ergebins = mysql_query($query, $verbindung);  
  
                            if (isset($_POST['gesendet'])) {  
                                header('Location: http://localhost/balzer/admin/aenderung/email_erfolg.php');  
                                exit;  
                            }  
                        }  
                        ?>  
                        </div>  
                        </div>  
                        <div id="footer">  
                        <?php  
                        include("../../data/footer_admin.html");  
                        ?>	  
                        </div>  
                </div>  
                </body>  
                </html>  

  1. Tach!

    ich habe in dem Quelltext irgendwo einen "Cannot modify header information" Fehler. Nach ein bisschen googlen sollte irgendwo ein Leerzeichen vor oder nach einem PHP Tag sein. Habe ihn aber noch nicht gefunden. So langsam bin ich ratlos und hoffe das mir hier jemand helfen kann.

    Das kann eine Ursache sein. Jegliche Ausgabe, die vor Header-modifizierenden Funktiuonen aufgerufen wird, ist ein Problem.

    Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\balzer\admin\aenderung\email.php:50) in H:\xampp\htdocs\balzer\admin\aenderung\email.php on line 101

    Schau bitte selbst nach. Die Ausgabe startete in der Datei email.php in Zeile 50. So steht es in der Meldung. Und in Zeile 101 sollte ein Header modifiziert werden.

    dedlfix.

    1. Tach!

      Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\balzer\admin\aenderung\email.php:50) in H:\xampp\htdocs\balzer\admin\aenderung\email.php on line 101

      Noch etwas, die Lösung kann ein Umsortieren der Abarbeitung nach EVA-Prinzip sein. Der E-Teil (Eingabe) ist meist weniger wichtig, den hat PHP schon erledigt. V und A ist hauptsächlich deine Aufgabe. Erst die Verarbeitung und dann die Ausgabe. Zur Ausgabe vorgesehene Daten, die während der Verarbeitung anfallen, musst du erstmal zwischenspeichern. Auch das Stichwort Affenformular könnte dich weiterbringen.

      dedlfix.

  2. Hallo,

    ich habe in dem Quelltext irgendwo einen "Cannot modify header information" Fehler.

    nein, nicht "irgendwo". Die Fehlermeldung sagt dir sehr genau, wo.

    Nach ein bisschen googlen sollte irgendwo ein Leerzeichen vor oder nach einem PHP Tag sein.

    Nein, nicht "irgendwo", sondern vor einer PHP-Anweisung, die irgendwelche HTTP-Header setzen soll (Cookie, Session, oder einfach nur header() allgemein). Nicht unbedingt _direkt_ davor. Und es muss auch nicht unbedingt ein Leerzeichen sein - jegliche Ausgabe an den Client vor dem Setzen von Header-Informationen löst diesen Fehler aus.

    Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\balzer\admin\aenderung\email.php:50) in H:\xampp\htdocs\balzer\admin\aenderung\email.php on line 101

    Da steht's doch: In Zeile 101 trat der Fehler auf - dort willst du irgendwelche HTTP-Headerdaten setzen. Die erste Ausgabe an den Client, die das verhindert, hast du aber schon in Zeile 50 gemacht. Das passt aber nicht mit deinem gezeigten Code zusammen; da sehe ich die erste Ausgabe schon in Zeile 7 (es sei denn, PHP zählt die Zeilen in den includes gleich mit, das wäre aber irreführend und mir bisher nicht aufgefallen).

    Das Verst&uuml;mmeln von Umlauten war &uuml;brigens noch nie wirklich n&ouml;tig. Ich weiß zwar nicht, was für eine Zeichencodierung du wirklich verwendest - ANSI ist keine. ANSI ist aber das Buzzword, das der Windows-Editor verwendet, wenn er Windows-1252 meint. Und auch in dieser Codierung sind Umlaute darstellbar, man kann (und sollte) sie also direkt im Klartext hinschreiben.

    Ciao,
     Martin

    --
    Mit einem freundlichen Wort und einer Waffe erreicht man mehr, als mit einem freundlichen Wort allein.
      (Al Capone, amerikanische Gangsterlegende)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(