Cannot modify header information - headers already sent by

Gesperrt
tomkolb
Beiträge: 50
Registriert: Di 22. Mär 2005, 13:55
Wohnort: Aalen (Baden-Württ.)
Kontaktdaten:

Cannot modify header information - headers already sent by

Beitrag von tomkolb » Mo 2. Mai 2005, 10:03

Hi Leute, habe inzwischen allerhand Beiträge zum Gästebuch-Modul gelesen, aber noch keine brauchbare Antwort zu der Fehlermeldung "Cannot modify header information - headers already sent by (output started at /home/www/htdocs/wbk.de/cms/front_content.php(567) : eval()'d code:9) in /home/www/htdocs/wbk.de/cms/front_content.php(567) : eval()'d code on line 718"
Die Meldung taucht immer nach dem Versenden eines Gästebuch-Eintrags, zusammen mit dem Text: "Vielen Dank für Ihren Eintrag . . ." auf.

Ansonsten läuft alles rund - Der Eintrag wird in der Ausgabe angezeigt.
Hat jemand ne Idee diese Fehlermeldung zu unterdrücken bzw. zu beseitigen?

Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon » Mo 2. Mai 2005, 12:41

Am Anfang Deines Moduls oder in Deinem Modul muß - bevor die erste echo-Ausgabe mit gültigem HTML-Code etc. kommt - ein Leerzeichen oder sonstiger "Unsinn" ausserhalb der PHP-Tags stehen. Das führt dazu das diese Zeichensequenzen an den Browser geschickt werden und somit keine weiteren Headerinformationen mehr geschickt werden können.

Gruß

Arno

tomkolb
Beiträge: 50
Registriert: Di 22. Mär 2005, 13:55
Wohnort: Aalen (Baden-Württ.)
Kontaktdaten:

Cannot modify header . . .

Beitrag von tomkolb » Di 3. Mai 2005, 08:40

Tag Arno! Vielen Dank für Deine rasche Bemühung. Leider haut das so nicht hin. Ich habe, so wie Du vorgeschlagen hast, im Modul "Gästebuch-Eingabe", im unteren Modul-Bereich "Ausgabe", vor den php-Teil ein " " gesetzt. Hab's auch mit Punkten versucht - die Fehlermeldung bleibt allerdings.

Hier mal der code im Modul "Gästebuch-Eingabe", Modul-Bereich "Ausgabe":

&nbsp;<br>

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Guestbook Eingabe v1.1
* Copyright : P.beauvain
* Created : 14-02-2004
* Modified : Mar. 1st 2004 by Lars D. Forseth <lars@forseth.de>
************************************************/

$activ = "CMS_VALUE[5]";
if ($activ == "") { $activ = "0";
}
$sperre ="CMS_VALUE[6]";
$links = explode('?',$PHP_SELF);
$link = $links[0];
$link = $link."?idcat=".$idcat."&idartlang=".$idartlang."&idart=".$idart; // back-link
$meineseite = $auth->url();

if ($a == "") { $a = "add"; }


if (strcmp($a,"add")==0)
{
echo "
<p style='margin-left:30px;'><B>Bitte mindestens Name und Kommentar angeben</B></p>
";
echo ' <p style="margin-left:30px;">
<br>';
echo "
<form name='gb' id='gb' action=".$link." method='post'>";
echo "
<input type=\"hidden\" name=\"a\" value=\"send\">";
echo "
<table border=0 cellpadding=2 cellspacing=0>
<tr class=text>
<td align=right style='width:100px;'><B> Name: </b></td>
<td><input type=text name=name value='$name' style='width:300px;'></td>
</tr>
<tr class=text>
<td align=right > E-Mail: </td>
<td><input type=text name=email value='$email' style='width:300px;'></td>
</tr>
<tr class=text>
<td align=right > Homepage: </td>
<td><input type=\"text\" name=\"url\" value=\"$url\" style='width:300px;'></td>
</tr>
<tr valign=top class=text>
<td align=right ><b> Kommentar: </b></td>
<td>
<textarea name=\"comments\" style='width:300px;' rows=11 wrap=physical>
$comments</text"."area>
</td>
</tr>
<tr class=text>
<td></td>
<td align=right>
<!-- <a href=$link onClick=gb.submit();>Eintragen</a> -->
<input type=\"submit\" value=\"Eintragen\"></td>
</tr>
</table>
</form></p>
";
} // end "if($a == "add")"






// wenn ein eintrag geschrieben werden soll
if(strcmp($a,"send")==0) {
// Formatierung des Textes aus dem Kommentarfeld
if($name!="" && $comments!="") { //Abfangen der "leeren" Einträge
echo '<p style="margin-left:30px;">';
/* filter given data */
$error = "no";

$mailkomm = stripslashes($comments);

$comments = trim($comments);
$comments = nl2br($comments);
$comments = str_replace("'","",$comments);
$comments = str_replace(";","",$comments);
$comments = str_replace("--","",$comments);
$comments = htmlentities($comments);
$comments = str_replace("<br />","",$comments);
$comments = str_replace("<br/>","",$comments);
$comments = str_replace("<br>","",$comments);
$comments = str_replace("\n","<br>",$comments);


// filter email
if ($error == "no") {
if ($email) {
if (strlen($email) > 50) {$error = "Emailadresse ist zu lang! (max. 50 Zeichen erlaubt)";}
else {
$valid = (eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]+$",$email));
if (!$valid == 1) {$error = "Emailadresse ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
else {
$parts = explode("@",$email);
$lasts = explode(".",$parts[1]);
$domain = $lasts[(count($lasts)-2)].".".$lasts[(count($lasts)-1)];
$valid = (int) (checkdnsrr($domain,ANY));
if ($valid == 0) {$error = "Emailadresse ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
} // end else
} // end else
} // end if email
} // end if no error


// filter name
if ($error == "no") {
if (strlen($name) > 30) {$error = "Name ist zu lang! (max. 30 Zeichen erlaubt)";}
else {
$name = nl2br($name);
$name = str_replace("'","",$name);
$name = str_replace(";","",$name);
$name = str_replace("--","",$name);
$name = htmlentities($name);
}
} // end if


// filter url
if ($error == "no") {
if ($url) {
if (strlen($url) > 100) {$error = "URL ist zu lang! (max. 100 Zeichen erlaubt)";}
else {
$url = str_replace("\n","",$url);
$url = str_replace("'","",$url);
$url = str_replace(";","",$url);
$url = str_replace("--","",$url);
$url = str_replace("\"","",$url);
$url = str_replace("'","",$url);
$url = str_replace("\'","",$url);
$url = str_replace(" ","",$url);
$url = strtolower($url);
$sheme_given = (eregi("^([a-z]+://)",$url));
if ($sheme_given == 0) {$url = "http://".$url;}
$url1 = (parse_url($url));
$host = $url1["host"];
$valid = (eregi("([a-z0-9_\\-\\.])+(\\.)+([a-z]{2,4})",$host));
if (!$valid == 1) {$error = "Homepage ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
else {
$valid = (int) (checkdnsrr($host,ANY));
if ($valid == 0) {$error = "Homepage ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
} // end else

} // end else
} // end if url
} // end if




if ($error == "no") {

. . . usw.

Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon » Di 3. Mai 2005, 12:24

Code: Alles auswählen

&nbsp;<br> 

<?php 
Hallo Tom,

nun... ich denke Du hast mich gründlichst Mißverstanden!!!

Gerade weil du vor dem <?php Zeichen emitierst kommt es zu dieser Fehlermeldung.

Deinen Code habe ich jetzt gar nicht mal vollständig gelesen. Werde ich mir gleich ansehen.

Gruß

Arno

tomkolb
Beiträge: 50
Registriert: Di 22. Mär 2005, 13:55
Wohnort: Aalen (Baden-Württ.)
Kontaktdaten:

Cannot modify header . . .

Beitrag von tomkolb » Di 3. Mai 2005, 14:05

Hi Arno! Schön dass Du dran bleibst. Wie Du siehst ist das Gästebuch je keine eigene "Erfindung", es wird ja hundertfach, in allen Möglichen Modifikationen hier im Forum angeboten.

Da ich jetzt nicht der große PHP-Crack bin und Contenido auch noch Neuland für mich ist, habe ich am code auch keine Änderungen vorgenommen. Anderswo scheint das also auch zu funktionieren.

Um das aber nochmal klarzumachen: Die Fehlermeldung taucht auf, ob mit oder ohne Leerzeichen (&nbsp;). Wenn Du möchtest maile ich Dir den Link zu meinem "Testverzeichnis" - Du könntest Dich dann mal selbst einloggen und Dir das Problem anschauen.

Gruß: tom

Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon » Di 3. Mai 2005, 15:59

Hallo Tom,

wie ich gesagt habe, war im Eingabemodul vorneweg ein Space eingetragen, dieses habe ich entfernt.

Das eigentliche Problem stellt, scheinbar zumindest bei Dir, allerdings das absetzen eines Cookies in dieem Codeabschnitt dar:

Code: Alles auswählen

// -------------- Cookie Setzen ---------------------------------------

/* if no cookie lifetime given */
 $lifetime = (int) ("CMS_VALUE[8]");
if($lifetime!="0" && $lifetime!=""){setcookie("AJUS-Forumeintrag","ja",time()+ ($lifetime*24*3600));} 
/* end if no cookie-lifetime given */
Erst nachdem ich das Absetzen des Cookies deaktiviert habe, kam die Fehlermeldung bei Dir nicht mehr hoch....

Um näheres sagen zu können, ob und wenn ja welches Modul bereits vorher irgendetwas absendet, muß ich mir die Sachen erst einmal etwas näher ansehen. Das geht dann aber wirklich erst heute Abend/Nacht.

Gruß

Arno

Arno Simon
Beiträge: 158
Registriert: Di 2. Sep 2003, 18:10
Kontaktdaten:

Beitrag von Arno Simon » Di 3. Mai 2005, 20:06

Hi...

nun, ich kann mir keinen Reim auf das Verhalten des Scripts bzw. des Ausgabe-Moduls machen, ausser das die Version auf der Seite schon einige Modifikationen enthält, welche das Senden des Cookies evtl. verhindern würden.

Vielleicht mag es sich ja einer von Euch einmal genauer ansehen:

Code: Alles auswählen

<?php /* <-- ####Arno hiervor war ein leerzeichen! */
/***********************************************
* CONTENIDO MODUL -  OUTPUT
*
* Modulname   :     Guestbook Eingabe v1.1
* Copyright   :     P.beauvain
* Created     :     14-02-2004
* Modified    :     Mar. 1st 2004 by Lars D. Forseth <lars@forseth.de>
************************************************/

$activ = "CMS_VALUE[5]";
if ($activ == "") { $activ = "0";
}
$sperre ="CMS_VALUE[6]";
$links  = explode('?',$PHP_SELF);
$link   = $links[0];
$link   = $link."?idcat=".$idcat."&idartlang=".$idartlang."&idart=".$idart; // back-link
$meineseite = $auth->url();

if ($a == "") { $a = "add"; }


if (strcmp($a,"add")==0)
{
echo "
<p style='margin-left:30px;'><B>Bitte mindestens Name und Kommentar angeben</B></p>
";
echo '<p style="margin-left:30px;">
        <br>';
echo "
        <form name='gb' id='gb' action=".$link." method='post'>";
echo "
        <input type=\"hidden\" name=\"a\" value=\"send\">";
echo "
        <table border=0 cellpadding=2 cellspacing=0>
          <tr class=text>
           <td align=right style='width:100px;'><B> Name:  </b></td>
           <td><input type=text name=name value='$name' style='width:300px;'></td>
          </tr>
          <tr class=text>
           <td align=right > E-Mail:  </td>
           <td><input type=text name=email value='$email' style='width:300px;'></td>
          </tr>
          <tr class=text>
           <td align=right > Homepage:  </td>
           <td><input type=\"text\" name=\"url\" value=\"$url\" style='width:300px;'></td>
          </tr>
          <tr valign=top class=text>
           <td align=right ><b> Kommentar:  </b></td>
           <td>
<textarea name=\"comments\" style='width:300px;' rows=11 wrap=physical>
$comments</text"."area>
           </td>
          </tr>
          <tr class=text>
            <td></td>
           <td align=right>
            <!-- <a href=$link onClick=gb.submit();>Eintragen</a> -->
            <input type=\"submit\" value=\"Eintragen\"></td>
          </tr>
        </table>
        </form></p>
        ";
} // end "if($a == "add")"






// wenn ein eintrag geschrieben werden soll
if(strcmp($a,"send")==0) {
  // Formatierung des Textes aus dem Kommentarfeld
if($name!="" && $comments!="") { //Abfangen der "leeren" Eintr?ge
    echo '<p style="margin-left:30px;">'; // #####Markierung
    /* filter given data */
    $error = "no";

    $mailkomm = stripslashes($comments);

    $comments = trim($comments);
    $comments = nl2br($comments);
    $comments = str_replace("'","",$comments);
    $comments = str_replace(";","",$comments);
    $comments = str_replace("--","",$comments);
    $comments = htmlentities($comments);
    $comments = str_replace("<br />","",$comments);
    $comments = str_replace("<br/>","",$comments);
    $comments = str_replace("<br>","",$comments);
    $comments = str_replace("\n","<br>",$comments);


      // filter email
      if ($error == "no") {
      if ($email) {
        if (strlen($email) > 50) {$error = "Emailadresse ist zu lang! (max. 50 Zeichen erlaubt)";}
        else {
        $valid = (eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]+$",$email));
        if (!$valid == 1) {$error = "Emailadresse ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
        else {
          $parts = explode("@",$email);
          $lasts = explode(".",$parts[1]);
          $domain = $lasts[(count($lasts)-2)].".".$lasts[(count($lasts)-1)];
          $valid = (int) (checkdnsrr($domain,ANY));
          if ($valid == 0) {$error = "Emailadresse ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
        } // end else
        } // end else
      } // end if email
      } // end if no error


      // filter name
      if ($error == "no") {
      if (strlen($name) > 30) {$error = "Name ist zu lang! (max. 30 Zeichen erlaubt)";}
      else {
      $name = nl2br($name);
      $name = str_replace("'","",$name);
      $name = str_replace(";","",$name);
      $name = str_replace("--","",$name);
      $name = htmlentities($name);
      }
      } // end if


      // filter url
      if ($error == "no") {
      if ($url) {
        if (strlen($url) > 100) {$error = "URL ist zu lang! (max. 100 Zeichen erlaubt)";}
        else {
        $url = str_replace("\n","",$url);
        $url = str_replace("'","",$url);
        $url = str_replace(";","",$url);
        $url = str_replace("--","",$url);
        $url = str_replace("\"","",$url);
        $url = str_replace("'","",$url);
        $url = str_replace("\'","",$url);
        $url = str_replace(" ","",$url);
        $url = strtolower($url);
        $sheme_given = (eregi("^([a-z]+://)",$url));
        if ($sheme_given == 0) {$url = "http://".$url;}
        $url1 = (parse_url($url));
        $host = $url1["host"];
        $valid = (eregi("([a-z0-9_\\-\\.])+(\\.)+([a-z]{2,4})",$host));
        if (!$valid == 1) {$error = "Homepage ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
        else {
          $valid = (int) (checkdnsrr($host,ANY));
          if ($valid == 0) {$error = "Homepage ist ung&uuml;ltig, bitte&nbsp;&uuml;berpr&uuml;fen!";}
        } // end else

        } // end else
      } // end if url
      } // end if




      if ($error == "no") {

      if (strlen($comments) > 3000) {$error = "Kommentar ist zu lang! (max. 3000 Zeichen erlaubt)";}
      else { // no errors in given data yet...
      //-------------------- konvertiere Smileys ---------------------------------

     
      // see if there are more smileys than allowed:
      $imgs = explode("<img src=",$comments);
      $imgs = count($imgs);
      if ($imgs > 10) {
        $error = "Zu viele Smileys! (max. 10 St?ck pro Eintrag)";
        $comments = "";
      } // end if($imgs > 10)

      } // end else no errors




      } // end else ("no errors in given data yet")


      /* end "filter given data" */



      /* if no error was found while filtering */

      if ($error == "no") {

/* search for words longer than 50 chars and shorten them + <br> */
$c = 0;
for ($i=0; $i < strlen($comments); $i++) {
  $c++;
  if (($comments[$i] == " ") or ($comments[$i] == "\n") or
      ($comments[$i] == "\r")) {$c = 0;}
  if ($c > 48) {
    $comments = substr_replace($comments, "-<br>", $i, 0);
    $i = $i+4;
    $c = 0;
  } // end if
} // end for


// ---------Abschnitt nach n Zeichen -------------------------------------

//$z = (int) ("CMS_VALUE[7]");
//for ($i=$z; $i < $z+20; $i++) {
//  $comments1 = substr($comments , 0, $i);
//  $cut = substr($comments, $i);
//  if ((ord ($cut) == 32)||(ord ($cut) == 44)||(ord ($cut) == 45)) {
//    $comments= substr($comments , 0, $i);
//    $comments .= ' .....';
//  } // end if
//} // end for

// -------------- IP /Host speichern ----------------------------------
$ip = getenv('REMOTE_ADDR');
$host = gethostbyaddr($ip);

// -------------- Cookie Setzen ---------------------------------------

/* if no cookie lifetime given */
/* $lifetime = (int) ("CMS_VALUE[8]");
if($lifetime!="0" && $lifetime!=""){setcookie("AJUS-Forumeintrag","ja",time()+ ($lifetime*24*3600));} */ /* #####Arno <-- die beiden vorstehenden Zeilen deaktviert */
/* end if no cookie-lifetime given */


if($HTTP_COOKIE_VARS["AJUS-Forumeintrag"]=="ja" && $sperre ==1){
  echo "<br><p><font class=textbold><b>Sie haben sich bereits eingetragen !<br>";
  if ($lifetime == 1){echo "Sie k?nnen sich Morgen erneut eintragen.";}
  else {echo "Sie k?nnen sich in CMS_VALUE[8] Tagen erneut eintragen.</b></p>";}
} // end if

else {
    $url =  str_replace("http://","",$url);
    $sql = "INSERT INTO con_guestbook ".
           "(name,email,location,url,date,comments,active,client) ".
           "VALUES ('$name','$email','$ip/$host','$url',NOW(),'$comments','$activ',$client)";
    $db->query($sql);

if("CMS_VALUE[3]" == 1 && "CMS_VALUE[4]" != "") {
  $mailbody = "Von: $name ( $email )\nHomepage: $url\n\nKommentar:\n$mailkomm\n\n http://".getenv("HTTP_HOST")."$meineseite";
  mail("CMS_VALUE[4]", "neuer Gaestebuch-Eintrag", $mailbody, "From: Gaestebuch<CMS_VALUE[4]>\nX-Mailer: PHP/" . phpversion(). "\n");
};




echo "<br><p style='margin-left:30px;'><b>Danke, Ihr Beitrag wurde eingetragen.</b></p><br>";
} // end else


} // end "if no error was found while filtering"

/* errors were found in given data */
else {

  $comments = str_replace("<br>","\n",$comments);
  echo "
  <br><br><br><font color=\"red\"><b><u>Fehler</u><br>".$error."</b></font><br><br>
  <form action=\"$link\" method=\"post\">
    <input type=\"hidden\" name=\"name\" value=\"$name\">
    <input type=\"hidden\" name=\"email\" value=\"$email\">
    <input type=\"hidden\" name=\"url\" value=\"$url\">
    <input type=\"hidden\" name=\"comments\" value=\"$comments\">
    <input type=\"submit\" value=\"&laquo;&nbsp;zur&uuml;ck\">
  </form>
  <br><br><br>";}
// end "errors were found in given data"



} // end "Abfangen von leeren Eintr?gen

else {

$comments = str_replace("<br>","\n",$comments);
echo "
   <br><p><font class=\"text\"><b>Bitte ?berpr?fen Sie ihre Eingaben!</b></p><br><br>
";
echo"
   <form action=\"$link\" method=\"post\">
    <input type=\"hidden\" name=\"name\" value=\"$name\">
    <input type=\"hidden\" name=\"email\" value=\"$email\">
    <input type=\"hidden\" name=\"url\" value=\"$url\">
    <input type=\"hidden\" name=\"comments\" value=\"$comments\">
    <input type=\"submit\" value=\"&laquo;&nbsp;zur&uuml;ck\">
  </form>
  ";
} // end else

echo "</p>";

} // end if($a == "send")


?>
Eine Stelle von der ich vermutete das diese den Fehler liefert, habe ich mit "// #####Markierung" markiert. Nachdem ich diese in einen anderen Teil des Scripts verlagert hatte und das Cookie wieder aktivierte kam wieder derselbe Fehler!

Leider ist das Script, wohlgemerkt für meinen Geschmack, etwas zu gemixt geschrieben (Tom wird wissen was ich meine, wenn er sich seine Module ansieht :D ), so das es mir schwer fällt das ganze zu analysieren. Ist ja auch nicht gerade klein....

Gruß

Arno

Gesperrt