Warning: Cannot modify header information

marco230671

Grünschnabel
Hallo Gemeinde
Versuche gerade durch ein Tutorial ein Formular in php zu erstellen.
Das Formular macht seine Dienste.
Jetzt wollte ich eine PHP Weiterleitung einbauen.
Und siehe da, bekomme eine Fehlermeldung, die ich nicht lösen kann.

Fehler:
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/xxx/xxx/senden.php:37) in /www/htdocs/xxx/xxx/senden.php on line 71

und

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/xxx/xxx/senden.php:37) in /www/htdocs/xxx/xxx/senden.php on line 72

In der senden.php Zeile 37 steht: <?php
In der senden.php Zeile 71 steht: header("Status: 301 Moved Permanently");
In der senden.php Zeile 72 steht: header("Location:erfolgreich.php");

Wie kann man das Problem lösen?

Habe die senden.php als Text Datei hier einmal an gehangen

Mit freundlich Grüßen
 

Anhänge

  • senden.txt
    4,1 KB · Aufrufe: 15
In deinem Code erfolgt vor header schon die Ausgabe von HTML-Code u. Leerzeichen (Zeilenumbrüche).
http://php-de.github.io/jumpto/headers-already-sent/ hat gesagt.:
Merke: Keine Ausgabe vor einem Headeraufruf! Sobald PHP (respektive eingebundenes HTML, XML, …) Daten ausgibt, erzeugt es vorher einen (genauer mehrere) Response-Header, gefolgt von den Bildschirmdaten. Für Headerangaben ist es zu diesem Zeitpunkt bereits zu spät.
 
Zuletzt bearbeitet:
Dein Fehler ist das du schon Ausgaben an den Browser gemacht hast, bevor du den Header aufrufst.

Ausgaben sind hier schon
HTML:
<!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=utf-8" />
<title>Unbenanntes Dokument</title>
<style type="text/css">
<!--

fieldset {
width: 250px;
padding: 5px;
border: solid 1px #591434;
background-color: #F8F7DF;
-webkit-box-shadow: 5px 5px 5px #0d0d0c; /* webkit browser*/
-moz-box-shadow: 5px 5px 5px #0d0d0c; /* firefox */
    box-shadow: 5px 5px 5px #0d0d0c;
}
legend {font-size: 62.5% font: bold 1.6em "Courier New", Courier, monospace;
    color: #CC0000;
    text-align: center;
}
.t1 {
    color: #F00;
    font-weight: bold;
    border: 1px solid #999;
    background-color: #F8F7DF;
    -webkit-box-shadow: 5px 5px 5px #0d0d0c; /* webkit browser*/ 
    -moz-box-shadow: 5px 5px 5px #0d0d0c; /* firefox */
    box-shadow: 5px 5px 5px #0d0d0c;
}

-->
</style>
</head>

<body>
Dieser teil muss nach der Header-Manipulation.
 
Wenn ich den Code den du da gepostet hast unter der Weiterleitung nach dem ?> setzte, marschiert das Formular einfach durch ohne irgendwas zu prüfen
 
Einfach
<?PHP
Ob_Start();
?>
Ganz am Anfang rein machen und ganz am Ende des Scriptes das :
<?PHP
Ob_end_Flush();
?>
Dann sollte es gehen :)
 
Meinst du das so?

PHP:
<?PHP
Ob_Start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
.
.
.
</body>
</html>
Ob_end_Flush();
?>
 
Zuletzt bearbeitet von einem Moderator:
Solche Probleme entstehen, wenn man Businesslogik mit Views vermischt. Die ob_* (output buffering)-Lösung sollte klappen, ist aber auch nicht eine sehr elegante Lösung.

Probiere es mal so:
PHP:
<?php
$name = $_POST['name'];
$nachname = $_POST['nachname'];
$strasse = $_POST['strasse'];
$nr = $_POST['nr'];
$plz = $_POST['plz'];
$stadt = $_POST['stadt'];
$mail = $_POST['mail'];
$versand = $_POST['versand'];
$bemerkung = $_POST['bemerkung'];


$adminmail = ("ZENSIERT");
$adminname = ("Marco");

$text = ("Ein Berwerbungsmappe wurde angefordert, von:
"."Name: ".$name."
"."Nachname: ".$nachname."
"."Strasse: ".$strasse."
"."Hausnummer: ".$nr."
"."PLZ: ".$plz."
"."Stadt: ".$stadt."
"."E-Mail: ".$mail."
"."Versand: ".$versand."
"."Bemerkung: ".$bemerkung);

$from ='from: '.$adminname.'<'.$adminmail.'>';
$betreff= 'ZENSIERT';


if($name !="" and $nachname !="" and $strasse !="" and $nr !="" and $plz !="" and $stadt !="" and $mail !="")
{
mail($adminmail,$betreff,$text);

header("Status: 301 Moved Permanently");
header("Location:erfolgreich.php");

}
else
{
?>
<!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=utf-8" />
<title>Unbenanntes Dokument</title>
<style type="text/css">
<!--

fieldset {
	width: 250px;
	padding: 5px;
	border: solid 1px #591434;
	background-color: #F8F7DF;
	-webkit-box-shadow: 5px 5px 5px #0d0d0c; /* webkit browser*/ 
	-moz-box-shadow: 5px 5px 5px #0d0d0c; /* firefox */ 
	box-shadow: 5px 5px 5px #0d0d0c;
}
legend {font-size: 62.5% font: bold 1.6em "Courier New", Courier, monospace;
	color: #CC0000;
	text-align: center;
}
.t1 {
	color: #F00;
	font-weight: bold;
	border: 1px solid #999;
	background-color: #F8F7DF;
	-webkit-box-shadow: 5px 5px 5px #0d0d0c; /* webkit browser*/ 
	-moz-box-shadow: 5px 5px 5px #0d0d0c; /* firefox */ 
	box-shadow: 5px 5px 5px #0d0d0c;
}

-->
</style>
</head>

<body>
<span class="t1">Leider wurden nicht alle Felder mit dem * ausgefüllt!</span>
<br><br>
<form id="form1" name="form1" method="post" action="">
  <fieldset>
  <legend>Bewerbungsmappe Anfordern</legend>
  <table border="0" cellpadding="0" cellpacing="0">
  <tr>
      <td width="83"><label for="name">Name:</label></td>
      <td width="287"><input type="text" name="name"  id="name" value="<?php echo $name;?>"/> 
      *</td>
  </tr>
    
  <tr>
      <td width="83"><label for="nachname">Nachname:</label></td>
      <td width="287"><input type="text" name="nachname" id="nachname" value="<?php echo $nachname;?>"/>
      *</td>
  </tr>
    
  <tr>
      <td width="83"><label for="strasse">Strasse:</label></td>
      <td width="287"><input type="text" name="strasse" id="strasse" value="<?php echo $strasse;?>"/>
      *</td>
      </tr>
      
  <tr>
      <td width="79"><label for="strasse">Hausnummer:</label></td>
      <td width="152"><input name="nr" type="text" id="nr" size="4" value="<?php echo $nr;?>"/>
      *</td>
  </tr>
    
  <tr>
      <td width="83"><label for="plz">PLZ:</label></td>
      <td width="287"><input name="plz" type="text" id="plz" size="6" maxlength="7" value="<?php echo $plz;?>"/>
      *</td>
  </tr>
        
  <tr> 
      <td width="79"><label for="stadt">Stadt:</label></td>
      <td width="152"><input type="text" name="stadt" id="stadt" value="<?php echo $stadt;?>"/>
      *</td>
  </tr>
    
  <tr>
      <td width="83"><label for="mail">E-Mail:</label></td>      
      <td width="287"><input type="text" name="mail" id="mail" value="<?php echo $mail;?>"/>
      *</td>
  </tr>
    
  <tr>
      <td width="83"><label for="versand">Versand:</label></td>      
      <td width="287"><select name="versand" id="versand">
        <option selected="selected">Post</option>
        <option>E-Mail (PDF)</option>
      </select></td>
  </tr>
    
  <tr>
      <td width="83"><label for="bemerkung">Bemerkung:</label></td>
      <td width="287"><textarea name="bemerkung" id="bemerkung" cols="22" rows="5"></textarea></td>
  </tr>
  
  <tr>
      <td width="83"><input type="submit" name="button2" id="button2" value="Senden" /></td>
  </tr>  
    </table>
  </fieldset>
</form>
<?php
}
?>
</body>
</html>

Weitere Anmerkungen:
Du prüfst gar nicht, ob die $_POST-Felder alle korrekt übergeben worden sind. Vor allem beim ersten Seitenladen solltest du eine Fülle von E_NOTICE-Warnungen von PHP bekommen.
Auch musst du darauf achten, in welchem Ausmaß du Nutzereingaben aus $_POST einfach in die mail()-Funktion steckst.
Des Weiteren würde ich dir den HTML 5-Doctype <!doctype html> empfehlen. Wieso geisterst du noch mit dem HTML 4-Doctype herum? ;)
 
Weitere Anmerkungen:
Du prüfst gar nicht, ob die $_POST-Felder alle korrekt übergeben worden sind. Vor allem beim ersten Seitenladen solltest du eine Fülle von E_NOTICE-Warnungen von PHP bekommen.
Auch musst du darauf achten, in welchem Ausmaß du Nutzereingaben aus $_POST einfach in die mail()-Funktion steckst.
Des Weiteren würde ich dir den HTML 5-Doctype <!doctype html> empfehlen. Wieso geisterst du noch mit dem HTML 4-Doctype herum? ;)


War von einen Video Tutorial von YouTube.
Fehler bekomme ich sichtlich nicht.

Und Danke jetzt geht es
 
Zuletzt bearbeitet von einem Moderator:
Zurück