Marc Metz: Problem mit POSt

Hi,
ich bin zur Zeit dabei ein Kommentarformular zu erstellen. Es funktioniert auch bestens.

http://www.cs-erweiterungen.de/scripts/viewcomments.php

Ich habe jedoch ein Problem:

Wenn man ein Kommentar schreibt werden die Dateien mit POST übertragen. Wenn man auf aktualisieren klickt nachdem ein Kommentar eingeschickt wurde, kommt immer eine Meldung: "Die Seite die sie ansehen wollen enthält Post Daten..."

Nun habe ich probiert, eine Weiterleitung zu machen (Ausschnitt von meinem Script:

if (!empty($_POST["Name"]) && !empty($_POST["Kommentar"])) {
$sql = "INSERT INTO kommentare " .
"VALUES ('', '$_POST[Name]', '$_POST[Home]', " .
"'$datum', '$_POST[Kommentar]')";
mysql_query($sql);

Header("Location: ".$_POST['Redirect']);
}

Dieser Teil wird ja ausgeführt, wenn auf Absenden geklickt wurde. Bei Redirect wird dann die Url eingefügt:

$_POST['Redirect']

Zum Beispiel: http://www.cs-erweiterungen.de/index.php?site=54

Leider bekomme ich immer diese Meldung:

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32

...ich weiß nicht weiter

  1. Hallo!

    Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32

    Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.
    Kannst du vl den Code von Zeile 32 posten?

    --
    Lg,
    Snafu
    1. Moin!

      Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
      Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.

      Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.

        Achso ja, stimmt. Asche über mein Haupt :)

        @Marc Metz
        Wenn in Zeile 9 <?php steht, was steht dann in zeile 1-8?

        --
        Lg,
        Snafu
        1. Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.
          Achso ja, stimmt. Asche über mein Haupt :)

          @Marc Metz
          Wenn in Zeile 9 <?php steht, was steht dann in zeile 1-8?

          Das hier:
          <!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=iso-8859-1" />
          <title>Kommentar senden</title>
          </head>

          <body>

          1. Hallo!

            Das hier:
            <!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=iso-8859-1" />
            <title>Kommentar senden</title>
            </head>

            <body>

            Nun ja, Problem gelöst würde ich sagen. Sorge dafür, dass der PHP Code als erstes verarbeitet wird und erst dann die Ausgabe erfolgt (das beinhaltet auch dein "Das hier: ...") und dein Problem ist gelöst.

            --
            Lg,
            Snafu
            1. DANKE werde das sofort probieren.. hoffe das es geht. Melde mich dann nochmal

              1. DANKE werde das sofort probieren.. hoffe das es geht. Melde mich dann nochmal

                Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.

                Ganze Scripts werden wohl nicht gerne gesehen.. aber ich weiß nicht, wie  mir sonst jemand helfen soll.. habe es deswegen mal in einer Textdatei hochgeladen:

                http://www.cs-erweiterungen.de/files/SCRIPT.txt

                1. Hallo!

                  Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.

                  Wird die Datei irgendwo included o.ä.?

                  ... habe es deswegen mal in einer Textdatei hochgeladen:

                  1.) Existiert diese Datei nicht.
                  2.) Kann man URLs zu Links machen mit [ link : deineURL ] oder [ link : deineURL @ title = deinOptionalerTitel ] alles ohne Leerzeichen

                  --
                  Lg,
                  Snafu
                  1. Hallo!

                    Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.
                    Wird die Datei irgendwo included o.ä.?
                    ... habe es deswegen mal in einer Textdatei hochgeladen:
                    1.) Existiert diese Datei nicht.
                    2.) Kann man URLs zu Links machen mit [ link : deineURL ] oder [ link : deineURL @ title = deinOptionalerTitel ] alles ohne Leerzeichen

                    Sorry! Da hat irgendetwas mit dem Hochladen nicht geklappt.

                    [ link : http://www.cs-erweiterungen.de/files/SCRIPT.txt ]

                    Ja sie wird includet, aber ich habe auch probiert, es dort wo es includet wird nach ganz oben zu schreiben.

                    1. Hallo!

                      Ja sie wird includet, aber ich habe auch probiert, es dort wo es includet wird nach ganz oben zu schreiben.

                      Damit es funktionniert müsste es in der Datei "SEITE die Aufgerufen wird" wie du sie glorreich in der .txt genannt hast __GANZ AM ANFANG__ stehen.
                      Die besagt Datei müsste also so irgendwie aussehen:

                      <?php  
                      // pliplaplo dein ganzer php code  
                        
                      // dein ereignis wo du eine andere seite haben willst kommt jetzt  
                      if($dein_ereignis)  
                      {  
                          header('location: '.$deine_url);  
                          exit;  
                      }  
                        
                      // ganz viel pliplaplo  
                      ?>  
                      <!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=iso-8859-1" />  
                      <title>Kommentar senden</title>  
                      </head>  
                      ...  
                      
                      

                      Verstehst du jetzt was ich mit __ganz oben / am Anfang__ meine? Es darf in keiner Datei (die includet wird oder die, welche jene Datei selber includen) KEINE AUSGABE erfolgen bevor du zur ensprechenden Zeile kommst.

                      --
                      Lg,
                      Snafu
                      1. Ach ja, bei deinem Include schreibst du einen __vollständigen__ HTML Code in einen anderen vollständingen HTML Code. Da wird der Validator aber nicht sehr glücklich sein.
                        Hast du dich überhaupt richtig in PHP eingelesen & -arbeitet?

                        --
                        Lg,
                        Snafu
                        1. hi,

                          Hast du dich überhaupt richtig in PHP eingelesen & -arbeitet?

                          Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?

                          gruß,
                          wahsaga

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

                            Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?

                            Man darf doch wohl noch an den Weihnachtsmann glauben :) (Auch wenn ich vor ca  12 Jahren herausgefunden habe, dass es das CHRISTKIND ist hehe)

                            --
                            Lg,
                            Snafu
                            1. Hallo!

                              Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?
                              Man darf doch wohl noch an den Weihnachtsmann glauben :) (Auch wenn ich vor ca  12 Jahren herausgefunden habe, dass es das CHRISTKIND ist hehe)

                              OH LA LA très magnifique :)

                              Vielen Dank Snafu

                              Ich versteh zwar nicht ganz warum es jetzt auf einmal geht.. weil vorhin hatte ich es genau da hingeschrieben. ABER JETZT GEHTS!

                              Immerhin hab ich ein ganzes PHP BUCH durchgelesen mit 426 SEITEN. Header  wurde darin nicht erwähnt. Das ich in der Includeten Datei das <html mit drin hatte war nen bisschen unüberlegt das stimmt.

  2. Hallo!

    Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
    Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.
    Kannst du vl den Code von Zeile 32 posten?

    In Zeile 32 steht genau das:

    Header("Location: ".$_POST['Redirect']);

    In Zeile neun steht nur das:
    <?php

    Darunter steht dann das:
    if (isset($_GET["admin"]) && $_GET["admin"] == "Passwort" || isset($_GET["Befehl"])) {
      echo "<h3>Administrierbereich</h3>";
      include("zugriff.inc.php");
      $sql = "SELECT * FROM kommentare";
      $result = mysql_query($sql);
      while ($row=mysql_fetch_assoc($result)) {
        echo "<div>[<a href='$_SERVER[PHP_SELF]?Befehl=$row[id]'>" .
    "Eintrag löschen</a> ] ";
        foreach ($row as $name => $key) {
          echo "$key ";
        }
        echo "<br><br></div>";
      }
    }

    if (isset($_GET["Befehl"])) {
      $sql="DELETE FROM kommentare WHERE id='$_GET[Befehl]'";
      if (mysql_query($sql)) {
        echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
        echo "<p><a href='$_SERVER[PHP_SELF]'>Ausloggen!</a></p>";
      }
    }

    1. hi,

      antworte bitt künftig direkt auf das Posting, auf dass du dich beziehst.

      In Zeile 32 steht genau das:

      Header("Location: ".$_POST['Redirect']);

      In Zeile neun steht nur das:
      <?php

      Und _davor_ steht was?

      Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
      Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.

      gruß,
      wahsaga

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

        antworte bitt künftig direkt auf das Posting, auf dass du dich beziehst.

        In Zeile 32 steht genau das:

        Header("Location: ".$_POST['Redirect']);

        In Zeile neun steht nur das:
        <?php

        Und _davor_ steht was?

        Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
        Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.

        gruß,
        wahsaga

        OKAY.. Davor steht das:
        <!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=iso-8859-1" />
        <title>Kommentar senden</title>
        </head>

        <body>

        1. Hallo

          In Zeile 32 steht genau das:

          Header("Location: ".$_POST['Redirect']);

          In Zeile neun steht nur das:
          <?php

          Und _davor_ steht was?

          Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
          Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.

          OKAY.. Davor steht das:
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          ...

          Was war an snafus Anmerkung "Sorge dafür, dass der PHP Code als erstes verarbeitet wird und erst dann die Ausgabe erfolgt" sowie an wahsagas oben zitierten Sätzen "Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden)." und "Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe." so unverständlich?

          Sobald auch nur _ein_ zur Darstellung im Browser vorgesehenes Zeichen an jenen gesandt wurde, ist der Zug für header() abgefahren (Ausnahme ist die Pufferung des Outputs mit ob_start() und ob_end_flush()).

          Wenn du vor jeglicher Ausgabe von für den Browser vorgesehenen Zeichen deine Prüfung mit eventuell vorgesehener Umleitung vornimmst und erst danach den HTML-Teil ausgibst, erledigt sich das Problem.

          Beispiel:

          <?php  
          if (isset($_POST["bla"]))  
             {  
             $blubb = "irgendwas";  
             }  
          else  
             {  
             header("http://www.example.com/trallalla.php");  
             }  
          ?>
          
          <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=iso-8859-1" />  
          <title>Kommentar senden</title>  
          </head>  
          <body>  
          <!-- ... -->
          

          Tschö, Auge

          --
          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
          (Victor Hugo)
          <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
          Veranstaltungsdatenbank Vdb 0.1
          1. Hallo

            Korrektur ("location" vergessen):

            <?php

            //...
            else
               {
               header("location: http://www.example.com/trallalla.php");
               }
            ?>

              
            Tschö, Auge  
            
            -- 
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.  
            (Victor Hugo)  
              
            <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>  
              
            [Veranstaltungsdatenbank Vdb 0.1](http://termindbase.auge8472.de/)