Jan: Cannot modify header Information

Hallo,

beisse mir jetzt seit einiger Zeit die Augen an einem pisseligen Fehler aus und finde ihn einfach nicht.

Vielleicht kann ja mal kurz jemand einen Blick drauf werfen:

Ich poste den Quellcode wo laut Php der Fehler sein soll +/- 10 Zeilen
____________________________________________
<Fehler>
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web429/html/jungschutzen/forms/terminform.php:3) in /srv/www/htdocs/web429/html/jungschutzen/forms/terminform.php on line 109
</Fehler>

<Code>
}

if(strlen($_POST['date_D'] < 2)) {
$m = base64_encode("Bitte Datum überprüfen");
header("Location: ./feedback.php?page=$m");
exit;

}

if(strlen($_POST['date_M'] < 2)) {
$m = base64_encode("Bitte Datum überprüfen");
header("Location: ./feedback.php?page=$m");
exit;

}

if(strlen($_POST['date_Y'] < 4)) {
$m = base64_encode("Bitte Datum überprüfen");
header("Location: ./feedback.php?page=$m");
//Zeile 100
exit;

}

if(strlen($_POST['time_H'] < 2)) {
$m = base64_encode("Bitte Zeitangabe überprüfen");
header("Location: ./feedback.php?page=$m");
exit;

}

if(strlen($_POST['time_M'] < 2)) {
$m = base64_encode("Bitte Zeitangabe überprüfen");
header("Location: ./feedback.php?page=$m");
exit;

}
</code>

Danke im Vorraus

Jan

  1. Hi Jan!

    pisseligen

    Bedeutet das so viel wie "Kack-"? ;-)

    Ich poste den Quellcode wo laut Php der Fehler sein soll +/- 10 Zeilen

    Der nützt uns gar nichts. Wir müssen alles sehen.

    Beachte, dass du auf keinen Fall eine Ausgabe - und sei es nur ein Leerzeichen - machen darfst, bevor du die Header sendest.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi Jan!

      pisseligen

      Bedeutet das so viel wie "Kack-"? ;-)

      Ich würde sagen: "den doofen" ;))

      Der nützt uns gar nichts. Wir müssen alles sehen.

      Dann geb ich dir alles =)

      Beachte, dass du auf keinen Fall eine Ausgabe - und sei es nur ein Leerzeichen - machen darfst, bevor du die Header sendest.

      <html>
      <head>
      <style type="text/css">
      <!--
      .Stil7 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; }
      .Stil8 {
       font-family: Arial, Helvetica, sans-serif;
       font-size: 12px;
       font-weight: bold;
      }
      input,select,submit {
       font-family: Tahoma;
       font-size: 8pt;
       color: #000000;
       background-color: #FFFFFF;
       border-style: solid;
       border-width: 1;
      }

      -->
      </style>
      <link href="http://www.partydoerf.de/design/style.css" rel="stylesheet" type="text/css">
      </head>
      <body>
      <div align="center"><font size="12"><b>BearbeitungsIndex</b></font></div>
      <br>
      <br>
      <a href="./terminform.php?page=eintrag">Termin eintragen</a>
      <br>
      <a href="./terminform.php?page=del_eintrag">Termin löschen</a>
      <p>&nbsp</p>
      <p>&nbsp</p>
      <p>&nbsp</p>
      <?

      if($_REQUEST[page] == "eintrag") {

      echo "<form action="terminform.php?page=eintrag_php" method="POST">";
      echo "<table border="2" cellspacing="2" cellpadding="2" align="center" width="250" height="250">";
      echo "<tr>";
      echo "<td colspan="3" valign="bottom" align="center"><b>Datum</b></td>";
      echo "<td colspan="2" valign="bottom" align="center"><b>Uhrzeit</b></td>";
      echo "<td colspan="2" valign="bottom" align="center"><b>Anwesenheitspflicht</b></td>";
      echo "<td valign="bottom" align="center"><b>Beschreibung des Termins</b></td>";
      echo "</tr>";
      echo "<tr>";
      echo "<td valign="top" align="center"><input type="text" size="2" name="date_D" maxlength="2"></td>";
      echo "<td valign="top" align="center"><input type="text" size="2" name="date_M" maxlength="2"></td>";
      echo "<td valign="top" align="center"><input type="text" size="2" name="date_Y" maxlength="4"></td>";
      echo "<td valign="top" align="center"><input type="text" size="2" name="time_H" maxlength="2"></td>";
      //Zeile 50
      echo "<td valign="top" align="center"><input type="text" size="2" name="time_M" maxlength="2"></td>";
      echo "<td valign="top" align="center"><input type="radio" name="anwesenheit" value="Y" checked>&nbsp Ja</td>";
      echo "<td valign="top" align="center"><input type="radio" name="anwesenheit" value="N">&nbsp Nein</td>";
      echo "<td valign="top" align="center"><textarea cols="25" rows="5" name="termin" maxlength="1000"></textarea></td>";
      echo "</tr>";
      echo "<td colspan="8" align="center"><input type="submit" value="Eintragen"></td>";
      echo "</tr>";
      echo "</table>";
      echo "</form>";

      }

      if($_REQUEST[page] == "eintrag_php") {

      mysql_connect("localhost","web429","17357247");
      mysql_select_db("usr_web429_1");

      if(!$_POST['date_D']  || !$_POST['date_M'] || !$_POST['date_Y'] || !$_POST['time_H'] || !$_POST['time_M']) {
      $m = base64_encode("Bitte alle Felder ausfüllen");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      if(strlen($_POST['date_D'] < 2)) {
      $m = base64_encode("Bitte Datum überprüfen");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      if(strlen($_POST['date_M'] < 2)) {
      $m = base64_encode("Bitte Datum überprüfen");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      if(strlen($_POST['date_Y'] < 4)) {
      $m = base64_encode("Bitte Datum überprüfen");
      header("Location: ./feedback.php?page=$m");
      //Zeile 100
      exit;

      }

      if(strlen($_POST['time_H'] < 2)) {
      $m = base64_encode("Bitte Zeitangabe überprüfen");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      if(strlen($_POST['time_M'] < 2)) {
      $m = base64_encode("Bitte Zeitangabe überprüfen");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      mysql_query("INSERT INTO schuetzentermine SET date_D='$_POST[date_D]', date_M='$_POST[date_M]', date_Y='$_POST[date_Y]', time_H='$_POST[time_H]', time_M='$_POST[time_M]', anwesenheit='$_POST[anwesenheit]'");
      $m = base64_encode("Der Termin wurde erfolgreich aufgenommen und sollte nun lesbar sein");
      header("Location: ./feedback.php?page=$m");
      exit;

      }

      ?>
      </body>
      </html>

      So das ist nun der komplette Code

      1. Hi Jan!

        Beachte, dass du auf keinen Fall eine Ausgabe - und sei es nur ein Leerzeichen - machen darfst, bevor du die Header sendest.

        <html>

        Was machst du hier? Du gibst etwas aus. Also werden die Header gesendet und "deine" Fehlermeldung wird ausgegeben.

        So das ist nun der komplette Code

        Supi. :)

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hi Hopsel,

          <html>
          Was machst du hier? Du gibst etwas aus. Also werden die Header gesendet und "deine" Fehlermeldung wird ausgegeben.

          soll das nun heißen, das ich HTML erst schließen muss bevor ich die Header Output starte?

          Wenn ja, dann ist das gut zu wissen weil das war mir als Neuling bisher noch nicht bewusst ;))

          Danke und Gruß Jan

          1. N'Abend,

            soll das nun heißen, das ich HTML erst schließen muss bevor ich die Header Output starte?

            nein, soll es nicht. Du darfst _gar keinen_ Output (Leerzeichen, Tags, Text, was auch immer) haben, bevor du den header-Befehl absetzt.

            MfG
            Rouven

            --
            -------------------
            ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
            1. Bedanke mich bei all denen, die es geschafft haben, mich wieder ein wenig schlauer zu machen ;))

              So und nun Gute Nacht

              Jan

          2. Hi Jan!

            <html>
            Was machst du hier? Du gibst etwas aus. Also werden die Header gesendet und "deine" Fehlermeldung wird ausgegeben.
            soll das nun heißen, das ich HTML erst schließen muss bevor ich die Header Output starte?

            Ohje.

            Du darfst _gar_ _nichts_ ausgeben. NICHTS.

            Bedeutet das so viel wie "Kack-"? ;-)

            Ich würde sagen: "den doofen" ;))

            Der nützt uns gar nichts. Wir müssen alles sehen.

            Dann geb ich dir alles =)

            Beachte, dass du auf keinen Fall eine Ausgabe - und sei es nur ein Leerzeichen - machen darfst, bevor du die Header sendest.

            <html>
            <head>
            <style type="text/css">
            <!--
            .Stil7 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; }
            .Stil8 {
            font-family: Arial, Helvetica, sans-serif;
            font-size: 12px;
            font-weight: bold;
            }
            input,select,submit {
            font-family: Tahoma;
            font-size: 8pt;
            color: #000000;
            background-color: #FFFFFF;
            border-style: solid;
            border-width: 1;
            }

            -->
            </style>
            <link href="http://www.partydoerf.de/design/style.css" rel="stylesheet" type="text/css">
            </head>
            <body>
            <div align="center"><font size="12"><b>BearbeitungsIndex</b></font></div>
            <br>
            <br>
            <a href="./terminform.php?page=eintrag">Termin eintragen</a>
            <br>
            <a href="./terminform.php?page=del_eintrag">Termin löschen</a>
            <p>&nbsp</p>
            <p>&nbsp</p>
            <p>&nbsp</p>
            <?

            if($_REQUEST[page] == "eintrag") {

            echo "<form action="terminform.php?page=eintrag_php" method="POST">";
            echo "<table border="2" cellspacing="2" cellpadding="2" align="center" width="250" height="250">";
            echo "<tr>";
            echo "<td colspan="3" valign="bottom" align="center"><b>Datum</b></td>";
            echo "<td colspan="2" valign="bottom" align="center"><b>Uhrzeit</b></td>";
            echo "<td colspan="2" valign="bottom" align="center"><b>Anwesenheitspflicht</b></td>";
            echo "<td valign="bottom" align="center"><b>Beschreibung des Termins</b></td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td valign="top" align="center"><input type="text" size="2" name="date_D" maxlength="2"></td>";
            echo "<td valign="top" align="center"><input type="text" size="2" name="date_M" maxlength="2"></td>";
            echo "<td valign="top" align="center"><input type="text" size="2" name="date_Y" maxlength="4"></td>";
            echo "<td valign="top" align="center"><input type="text" size="2" name="time_H" maxlength="2"></td>";
            //Zeile 50
            echo "<td valign="top" align="center"><input type="text" size="2" name="time_M" maxlength="2"></td>";
            echo "<td valign="top" align="center"><input type="radio" name="anwesenheit" value="Y" checked>&nbsp Ja</td>";
            echo "<td valign="top" align="center"><input type="radio" name="anwesenheit" value="N">&nbsp Nein</td>";
            echo "<td valign="top" align="center"><textarea cols="25" rows="5" name="termin" maxlength="1000"></textarea></td>";
            echo "</tr>";
            echo "<td colspan="8" align="center"><input type="submit" value="Eintragen"></td>";
            echo "</tr>";
            echo "</table>";
            echo "</form>";

            All das musst du rauswerfen. Theoretisch. Natürlich musst du dir einen anderen Weg suchen.

            Auf die Gefahr hin, dass ich mich wiederhole: Mache keine Ausgabe, bevor du die Header sendest.
            Dein Script muss also zwangsläufig mit <? beginnen. Und auch davor darf keine Leerzeile sein.

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            1. Hi

              Ohje.

              Schon geschnallt;) Alles in Butter=) Funktioniert

  2. Hallo Jan,

    Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web429/html/jungschutzen/forms/terminform.php:3) in /srv/www/htdocs/web429/html/jungschutzen/forms/terminform.php on line 109

    was steht denn in Zeile 3, in der angeblich die Ausgabe bereits begonnen wurde? Womöglich eine Leerzeile außerhalb eines <?php ... ?> Blocks, oder eine Anweisung, die eine Fehlermeldung produziert hat?

    So long,

    Martin

    --
    Die letzten Worte der Challenger-Crew:
    Lasst doch mal die Frau ans Steuer!
    1. Hallo Martin,

      was steht denn in Zeile 3, in der angeblich die Ausgabe bereits begonnen wurde? Womöglich eine Leerzeile außerhalb eines <?php ... ?> Blocks, oder eine Anweisung, die eine Fehlermeldung produziert hat?

      Da fängt der style Tag an...

      Jan

  3. Hallo,

    bei dir treffen mehr als eine der if- Bedingungen zu. Bei der zweiten sendest du WIEDER einen header, und das mag er nicht.

    Arbeite mit *else* zwischen den If's, damit nur EIN header geschickt wird.

    Kalle

    1. Hi Kalle!

      Hallo,

      bei dir treffen mehr als eine der if- Bedingungen zu. Bei der zweiten sendest du WIEDER einen header, und das mag er nicht.

      Nö. Wenn ein Location-Header gesendet wird, bricht das Script automatisch ab.
      Außerdem hat er zusätzlich noch ein exit dahinter stehen.

      Arbeite mit *else* zwischen den If's, damit nur EIN header geschickt wird.

      So wie er die if-Bedingung jetzt benutzt, ist es eine verkappte switch-Anweisung und nichts dagegen einzuwenden.

      MfG H☼psel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      1. Hi H☼psel!

        Nö. Wenn ein Location-Header gesendet wird, bricht das Script automatisch ab.
        Außerdem hat er zusätzlich noch ein exit dahinter stehen.

        Ach, habe ich mit anderen Programmiersprachen verwechselt, wo ein exit ja nur die übergeordnete Schleife verläßt, aber:
        PHP: exit -- Output a message and terminate the current script

        So wie er die if-Bedingung jetzt benutzt, ist es eine verkappte switch-Anweisung und nichts dagegen einzuwenden.

        Okay, dann macht er wohl vorher eine Ausgabe, die er nicht gepostet hat.

        LG Kalle

      2. Moin!

        Nö. Wenn ein Location-Header gesendet wird, bricht das Script automatisch ab.

        Woher hast du denn DIESE Falschinfo?

        Außerdem hat er zusätzlich noch ein exit dahinter stehen.

        Allein das exit beendet ein Skript.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Hi Sven!

          Nö. Wenn ein Location-Header gesendet wird, bricht das Script automatisch ab.

          Wenn header("Location:http://google.de"); ausgeführt wird, wird doch danach das Script abgebrochen, oder?

          Woher hast du denn DIESE Falschinfo?

          Ich dachte eigentlich, dass das mal jemand in diesem Forum geschrieben hatte.

          MfG H☼psel

          --
          "It's amazing I won. I was running against peace, prosperity, and incumbency."
          George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
          Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
          1. hi,

            Wenn header("Location:http://google.de"); ausgeführt wird, wird doch danach das Script abgebrochen, oder?

            Nein - warum sollte es denn?
            Dazu gibt es überhaupt keinen vernünftigen Grund, eher im Gegenteil.

            Beim Location-Header wird ein HTTP Status Code 302 Found ausgelöst - und der RFC sagt dazu:

            "Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s)."

            Du _solltest_ also eigentlich bei so einer "Umleitung" sogar noch ein (HTML-)Dokument mit ausliefern, welches einen Hyperlink zur neuen Adresse enthält - falls mal ein Client mit dem HTTP-Header nichts anfangen kann.
            Wie würdest du so etwas machen wollen, wenn nach dem header() dein Script schon abgebrochen werden würde?

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. hi,

        Nö. Wenn ein Location-Header gesendet wird, bricht das Script automatisch ab.

        Ebenfalls Nö.

        PHP ist durchaus in der Lage (und idR. auch willens) mehrere verschiedene oder auch mehrere gleichartige Header erst mal zu "sammeln", bevor sie rausgeschickt werden.
        Bei mehreren gleichartigen Headern kann man dann auch noch angeben, ob vorherige ersetzt oder die neuen "dazuaddiert" werden sollen.

        Außerdem hat er zusätzlich noch ein exit dahinter stehen.

        Das ist deshalb in solchen Fällen auch sehr empfehlenswert.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }