PHP Warnung:Cannot modify header inform..

Nabi

Erfahrenes Mitglied
HI, Folgendes PHP Code löst ein PHP Warnung/Fehler aus:
Warning: Cannot modify header information - headers already sent by (output started at C:\..\test\cookie1.php:7) in C:\..\test\cookie1.php on line 11
PHP:
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<?php
// Inhalt festlegen
$inhalt = "Ich bin dein Cookie!";
// Cookie erzeugen
setcookie("cook_first_one", $inhalt, time()+600);
// Prüfen 
if (!$_COOKIE["cook_first_one"]) {
echo "Cookie ist nicht vorhanden!";
} else {
echo $_COOKIE["cook_first_one"];
}
?>
</body>
</html>

Diese Warnung Handelt Sich um White Spaces
Um diese Fehler zu Beheben habe ich den Code Umgeschrieben (2 PHP Dokumente) So:
Erste php Dokument :
PHP:
<?php
// Inhalt festlegen
$inhalt = "Ich bin dein Cookie!";
// Cookie erzeugen
setcookie("cook_first_one", $inhalt, time()+600);
include("cookie1test.php");
?>

und "cookie1test.php"
PHP:
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<?php
// Prüfen 
if (!$_COOKIE["cook_first_one"]) {
echo "Cookie ist nicht vorhanden!";
} else {
echo $_COOKIE["cook_first_one"];
}
?>
</body>
</html>
Meine Frage: Gibt es eine Andere oder Bessere Lösung ?.
Danke In Voraus
 
Notiere mal das Setzen des Cookies an den Anfang des Skriptes. Denn Header-Informationen können nur dann noch verändert werden, wenn bisher noch keine Ausgabe erfolgte.
 
Bei der Warnung geht es nicht um Whitespaces, sondern um den HTML-Code der vor setcookie() bereits ausgegeben wird.
Vor Funktionen die den HTTP-Header manipulieren, z.B. header() und setcookie(), darf keine Ausgabe an den Browser stattfinden.
 
Das problem ist Nun gelöst weil Der HTML teil liegt unter setcookie() funktion ,aber
PHP:
<?php
// Inhalt festlegen
$inhalt = "Ich bin dein Cookie!";
// Cookie erzeugen
setcookie("cook_first_one", $inhalt, time()+600);
?>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<?php
// Prüfen 
if (!$_COOKIE["cook_first_one"]) {
echo "Cookie ist nicht vorhanden!";
} else {
echo $_COOKIE["cook_first_one"];
}
?>
</body>
</html>

Ein Cookie kann nicht immer am anfang des Codes erzeugt werden insbesonderes wenn
diese von einen text abhangig ist der in ein formular eingegeben muss, wie in diesem beispiel:
Mit diesem Code ist die meldung "Cannot modify header inform" wieder angezeigt.
PHP:
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PersonalisierteWebsite</title>
</head>
<body>
<?php // Prüfen - Cookie vorhanden?
if (isset($_COOKIE['cook_besucher'])) {
	// Cookie Daten extrahieren
	$cook_daten = explode("&",$_COOKIE['cook_besucher']);
	// Extrahierte Cookie Daten ausgeben und an dynamische
	// Variablen übergeben.
	foreach ($cook_daten as $key=>$element) {
		echo "$key: $element<br>";
		${"co_$key"} = $element;
	}
	// Formatierte Ausgabe
	echo "<p><font color=$co_2>Herzliche Willkommen $co_0 $co_1<br>
	Ihre Lieblingsfarbe ist: $co_2</font>";
} else {
	// Formular aufrufen
	eingabe_form();
}
// Eingabe Formular + Cookie Generierung
function eingabe_form() {
  if (!isset($_POST['Submit'])) {$PHP_SELF="";
    
		echo "<form method='post' action='$PHP_SELF'>
	  <p>Vorname:
	    <input type='text' name='vorname'>
	  </p>
	  <p>Nachname:
	    <input type='text' name='nachname'>
	  </p>
	  <p>Hintergrund:
	    <select name='farbe'>
	      <option value='#FF0000'>Rot</option>
	      <option value='#00FF00'>Gr&uuml;n</option>
	      <option value='#0000FF'>Blau</option>
	    </select>
	  </p>
	  <p>
	    <input type='submit' name='Submit' value='Sichern'>
	  </p>
	</form>";
  } else {
	$daten = array($_POST["vorname"],$_POST["nachname"],$_POST["farbe"]);
	$daten_string = implode("&",$daten);
	setcookie("cook_besucher", $daten_string, time()+600);
	echo "Cookie wurde gesetzt!";
	unset($_POST['Submit']);
  }
}
?>
</body>
</html>

Naturlich kann man das HTML teil entfernen & das Problem lösen wie hier :
PHP:
<?php // Prüfen - Cookie vorhanden?
if (isset($_COOKIE['cook_besucher'])) {
	// Cookie Daten extrahieren
	$cook_daten = explode("&",$_COOKIE['cook_besucher']);
	// Extrahierte Cookie Daten ausgeben und an dynamische
	// Variablen übergeben.
	foreach ($cook_daten as $key=>$element) {
		echo "$key: $element<br>";
		${"co_$key"} = $element;
	}
	// Formatierte Ausgabe
	echo "<p><font color=$co_2>Herzliche Willkommen $co_0 $co_1<br>
	Ihre Lieblingsfarbe ist: $co_2</font>";
} else {
	// Formular aufrufen
	eingabe_form();
}
// Eingabe Formular + Cookie Generierung
function eingabe_form() {
  if (!isset($_POST['Submit'])) {$PHP_SELF="";
    
		echo "<form method='post' action='$PHP_SELF'>
	  <p>Vorname:
	    <input type='text' name='vorname'>
	  </p>
	  <p>Nachname:
	    <input type='text' name='nachname'>
	  </p>
	  <p>Hintergrund:
	    <select name='farbe'>
	      <option value='#FF0000'>Rot</option>
	      <option value='#00FF00'>Gr&uuml;n</option>
	      <option value='#0000FF'>Blau</option>
	    </select>
	  </p>
	  <p>
	    <input type='submit' name='Submit' value='Sichern'>
	  </p>
	</form>";
  } else {
	$daten = array($_POST["vorname"],$_POST["nachname"],$_POST["farbe"]);
	$daten_string = implode("&",$daten);
	setcookie("cook_besucher", $daten_string, time()+600);
	echo "Cookie wurde gesetzt!";
	unset($_POST['Submit']);
  }
}
?>

Aber ich frage Welche eigenschaften hat jetzt diese formular : HTML 4 oder
HTML 4 Transitional Oder HTML Frameset, es gibt Sachen die nur mit HTML 4 Transiotional erzeugen werden können gilt nicht mit HTML 4,
Kann man diese Meldung nicht innerhalb von HTML code Verhindern?.
 
Zuletzt bearbeitet:
Zurück