WinFuture-Forum.de: Headers Already Sent - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Headers Already Sent formular.inc.php verursacht header-fehler


#1 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

  geschrieben 16. Januar 2007 - 00:26

hallo ihr!

ich habe ein problem mit meinem formmailer. bis jetzt sendet er noch keine email, aber das ist auch nicht das problem.
sondern ich wechsel über header("location: bestaetigung.inc.php") zu der bestätigungsseite, dass das formular versandt wurde. dadurch, dass ich das formular (formular.inc.php) in die seite include, steht vor der header() funktion html-code, was zum fehler "headers already sent" führt.
wie kann ich das problem lösen?

formular.inc.php:
<?php

	session_start();
	
	if ( (isset($_REQUEST["do"]) ) && ( $_REQUEST["do"] == "check" ) )
	{
		// Formulardaten wurden bereits versandt
		
		$error_msg = "";
		
		if 	( 
				(isset( $_REQUEST["Wandflaeche"] ))  &&  ($_REQUEST["Wandflaeche"] == "") &&
				(isset( $_REQUEST["Grundflaeche"] ))  &&  ($_REQUEST["Grundflaeche"] == "") 
			)
		{
			$error_msg .= "» Bitte geben Sie Wand- oder Grundfläche an<br>";
		}
		
		if ( (isset( $_REQUEST["Zeitraum"] ))  &&  ($_REQUEST["Zeitraum"] == "") )
		{
			$error_msg .= "» Bitte geben Sie einen gewünschten Zeitraum an<br>";
		}
		if ( !isset( $_REQUEST["Anrede"] ))
		{
			$error_msg .= "» Bitte wählen Sie eine Anrede aus<br>";
		}		
		if ( (isset( $_REQUEST["Name"] ))  &&  ($_REQUEST["Name"] == "") )
		{
			$error_msg .= "» Bitte geben Sie Ihren Namen an<br>";
		}
		
		if 	( 
				(
					(isset( $_REQUEST["Strasse"] ))  &&  ($_REQUEST["Strasse"] == "") ||
					(isset( $_REQUEST["PLZ"] ))  &&  ($_REQUEST["PLZ"] == "") ||
					(isset( $_REQUEST["Nr"] ))  &&  ($_REQUEST["Nr"] == "") ||
					(isset( $_REQUEST["Ort"] ))  &&  ($_REQUEST["Ort"] == "")
				) &&
				(isset( $_REQUEST["email"] ))  &&  ($_REQUEST["email"] == "") &&
				(isset( $_REQUEST["Telefon"] ))  &&  ($_REQUEST["Telefon"] == "") 
			)
		{
			$error_msg .= "» Bitte geben Sie mindestens eine vollständige Kontaktadresse an (Anschrift, e-mail oder Telefon)<br>";
		}
		
		$_SESSION["Kategorie"]		=	$_REQUEST["Kategorie"];	
		$_SESSION["Wandflaeche"]	=	$_REQUEST["Wandflaeche"];	
		$_SESSION["Grundflache"]	=	$_REQUEST["Grundflaeche"];	
		$_SESSION["Zeitraum"]		=	$_REQUEST["Zeitraum"];	
		$_SESSION["Bemerkungen"]	=	$_REQUEST["Bemerkungen"];	
		$_SESSION["Anrede"]			=	$_REQUEST["Anrede"];	
		$_SESSION["Name"]			=	$_REQUEST["Name"];	
		$_SESSION["Strasse"]		=	$_REQUEST["Strasse"];	
		$_SESSION["Nr"]				=	$_REQUEST["Nr"];	
		$_SESSION["PLZ"]			=	$_REQUEST["PLZ"];	
		$_SESSION["Ort"]			=	$_REQUEST["Ort"];
		$_SESSION["email"]			=	$_REQUEST["email"];
		$_SESSION["Telefon"]		=	$_REQUEST["Telefon"];
		
		// alles o.k. - dann ausgabe.php aufrufen und skript beenden
		if ( $error_msg == "" )
		{
			header("Location: bestaetigung.inc.php");
			die();
		}
		
	}
		// Formular wird zum ersten mal aufgerufen

		


?>
<!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>Unbenanntes Dokument</title>
</head>

<body>

<p style="color:#990000"><b><?php echo $error_msg; ?></b></p>

<form name="anfrage" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
			
			<!-- Hier die eigentlichen Formularfelder eintragen. -->
			
<table width="400" border="0">

<b>Anliegen<hr /></b>

<tr><td><input type="hidden" name="do" value="check" /> <!-- hidden-feld zum überprüfen, ob formulardaten bereits gesendet wurden -->

  <tr>
	<td width="100">Kategorie:</td>
	<td>
	 <select name="Kategorie[]">
	  <option>Fassade</option>
	  <option>komplette Wohnung</option>
	  <option>Zimmer</option>
	  <option>Treppenhaus</option>
	  <option>Lackierung</option>
	 </select>
	</td>
  </tr>
  <tr>
	<td>Wandfläche:</td>
	<td><input value="<?php echo $_REQUEST["Wandflaeche"]; ?>" type="text" style="margin-right:5px" name="Wandflaeche" />m²</td>
  </tr>
  <tr>
	<td>Grundfläche:</td>
	<td><input value="<?php echo $_REQUEST["Grundflaeche"]; ?>" type="text" style="margin-right:5px" name="Grundflaeche" />m²</td>
  </tr>
  <tr>
	<td>gewüschter<br />Zeitraum:</td>
	<td><input value="<?php echo $_REQUEST["Zeitraum"]; ?>" type="text" name="Zeitraum" /></td>
  </tr>
  <tr>
	<td style="vertical-align:top">Bemerkungen:</td>
	<td><textarea name="Bemerkungen" rows="5" cols="30"><?php echo $_REQUEST["Bemerkungen"]; ?></textarea></td>
  </tr>
</table><br /><br />
<table width="400" border="0">  
<b>Kontakt<hr /></b>
  <tr>
	<td width="100"></td>
	<td>
	 <p>
	  <label><input 
	  <?php 
	  if ( (isset($_REQUEST["Anrede"]) ) && ( $_REQUEST["Anrede"] == "Herr" ) )	
	  { echo "checked='checked'"; }  
	  ?> type="radio" name="Anrede" value="Herr" />Herr</label>
	  <label><input 
	  <?php 
	  if ( (isset($_REQUEST["Anrede"]) ) && ( $_REQUEST["Anrede"] == "Frau" ) )	
	  { echo "checked='checked'"; }  
	  ?>
	  type="radio" name="Anrede" value="Frau" />Frau</label>
	 </p>
	</td>
  </tr>
  <tr>
	<td>Name:</td>
	<td><input value="<?php echo $_REQUEST["Name"]; ?>" type="text" name="Name" /></td>
  </tr>
  <tr>
	<td>Vorname:</td>
	<td><input value="<?php echo $_REQUEST["Vorname"]; ?>" type="text" name="Vorname" /></td>
  </tr>
  <tr>
	<td>Straße/Nr.:</td>
	<td><input value="<?php echo $_REQUEST["Strasse"]; ?>" type="text" name="Strasse" style="margin-right:10px" size="29" /><input value="<?php echo $_REQUEST["Nr"]; ?>" type="text" name="Nr" maxlength="5" size="3" /></td>
  </tr>
  <tr>
	<td>PLZ/Ort:</td>
	<td><input value="<?php echo $_REQUEST["PLZ"]; ?>" type="text" name="PLZ" maxlength="5" style="margin-right:10px" size="3" /><input value="<?php echo $_REQUEST["Ort"]; ?>" type="text" name="Ort" /></td>
  </tr>
  <tr><td> </td></tr>
  <tr>
	<td>e-Mail:</td>
	<td><input value="<?php echo $_REQUEST["email"]; ?>" size="30" type="text" name="email" /></td>
  </tr>
  <tr>
   <td>Telefon:</td>
	<td><input value="<?php echo $_REQUEST["Telefon"]; ?>" name="Telefon" type="text" />
   </td>
  </tr>  
</table><br /><br />
<input type="submit" value="Anfrage senden" />

</form>
</body>
</html>


hier wird sie included:
<!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" />
<link rel="stylesheet" type="text/css" href="css/base.css" />
<title></title>

</head>
<body>
 <div class="plus">
  
 </div>
	
	<div class="content">
	
	 <p id="navigator"><b>Sie befinden sich hier: <a href="iFOUR.php" class="navigator">Auftragsanfrage</a></b></p>
	 
	 <p id="heading">Ihr maßgeschneidertes Angebot</p>
	 
	 <div id="content">		

Füllen Sie die nachstehenden Felder bitte möglichst genau aus damit wir Ihnen ein passendes Angebot erstellen können.
<br />Achten Sie bitte darauf mindestens eine Kontaktadresse anzugeben.<br /><br />

<?php include('formmailer_self/formular.inc.php') ?>
	</div>
	

	
	
 </div>
   

</body>
</html>


die bestätigungsseite bestaetigung.inc.php:
<?php
	session_start();
?>
<!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>Unbenanntes Dokument</title>
</head>

<body>

Ihre Anfrage wurde an uns übermittelt <?php echo $_SESSION["Anrede"] . " " . $_SESSION["Name"] . "!"; ?>
<br /><br />
Vielen Dank.
</body>
</html>

Dieser Beitrag wurde von felisse.courage bearbeitet: 16. Januar 2007 - 00:59

0

Anzeige



#2 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 16. Januar 2007 - 00:38

das

header("Location: ausgabe.php");

darf nicht nach einer ausgabe stehen. im eigentlichen dokument haut es zwar noch hin aber es wird ja erst nach einer ausgabe includiert. das dürfte das problem sein.

Dieser Beitrag wurde von Gitarremann bearbeitet: 16. Januar 2007 - 00:45

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#3 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 16. Januar 2007 - 00:43

Hatten wir das Problem nicht schon mal? :8):

Also, in der Datei formular.inc.php hast du ein Formular drin, dass an $_SERVER['PHP_SELF'] weiterleitet. Das willst du aber gar nicht, denn das leitet nicht an formular.inc.php weiter, sondern in deinem Fall an die Datei, die formular.inc.php included. Dann kannst du aber per header nicht mehr weiterleiten. Das Problem sollte gelöst sein, wenn das Formular nicht auf $_SERVER['PHP_SELF'] sonder stattdessen auf formular.inc.php weiterleitet. Dann geht das Weiterleiten per header, weil kein HTML-Code vorher ausgegeben wird, der sonst aus der Datei käme, die die formular.inc.php included.

Dieser Beitrag wurde von MNG bearbeitet: 16. Januar 2007 - 00:44

0

#4 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

geschrieben 16. Januar 2007 - 00:58

@gitarremann:
dass die html-ausgabe das problem ist, habe ich ja erkannt. aber trotzdem danke :8):

@MNG:
wenn ich direkt auf formular.inc.php verweise, dann bekomme ich ja beim aufruf der seite nur diese seite und aber nicht meine ganze seite, sprich das ganze drumrum geht flöten. oder nicht? ich werds mal probieren, aber so denke ich mir das jetzt mal.

edit: ja genau, das tut er dann. hmpf..

Dieser Beitrag wurde von felisse.courage bearbeitet: 16. Januar 2007 - 01:01

0

#5 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 16. Januar 2007 - 01:05

sorry - ja jetzt seh ich das auch. also ich mach das immer so, dass ich bei einem dokument, was ich per header weiterleite überhaupt keine ausgabe mache. also vom schema her so

das formular, wo man die daten eingibt, werden direkt an das dokument geschickt, welches die bearbeitung durchführt und von diesem dokument wird dann auf die ergebnisseite weitergeleitet.

also nur mal als beispiel für nen einfachen mailer:

das erste formular wäre über "index.php?seite=eingabe" erreichbar.

in dem steht irgendwo <form action="Unterordner/senden.php"...

das dokument "senden.php" wird also nicht includiert, sondern direkt aufgerufen und von dem dokument, das selbst keine ausgabe enthält, wird auf die ergebnisseite weitergeleitet.

header("Location: ../index.php?seite=ergebnis&code=x");

der code wird auch im dokument "senden.php" festgelegt und beinhaltet die meldung für die ergebnisseite. obs geklappt hat oder entsprechende fehlermeldung falls nicht.

Dieser Beitrag wurde von Gitarremann bearbeitet: 16. Januar 2007 - 01:15

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#6 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

geschrieben 16. Januar 2007 - 01:14

du meinst also noch einen schritt dazwischen gehen?
also ganz verstehe ich das ehrlich gesagt nicht, was du meinst.

das eingabe-formular wird included und das ausgabe-formular wird included. das soll bitte so bleiben. gibt es keine andere möglichkeit weiterzuleiten? so dass ich keine funktion wie header() habe, sondern etwas was eine vorangehende html-ausgabe akzeptiert?
0

#7 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 16. Januar 2007 - 01:17

hab meinen beitrag drüber gerade editiert und das erklärt, wie ich das meine.
Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#8 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

geschrieben 16. Januar 2007 - 01:18

okay vielen dank! ich probier das morgen. ich bin zu müde um das jetzt noch zu verwirklichen. morgen weiter okay? danke erstmal, wir hören uns...
0

#9 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 16. Januar 2007 - 10:09

Ah, jetzt seh' ich's erst: Wenn du die Form direkt auf formular.inc.php zeigen lässt, dann funktioniert das Ganze wie gewollt - allerdings nur, wenn alle Eingaben vorhanden sind. Wenn Eingaben fehlen, dann wird der HTML-Teil der formular.inc.php ohne "das Drumherum" ausgegeben. Hmm... das lässt sich eigentlich ganz einfach beheben: In formular.inc.php, oben im PHP-Teil, prüfst du, ob alles OK ist:
		if ( $error_msg == "" )
		{
			header("Location: bestaetigung.inc.php");
			die();
		}

Da müsst man nur den Negativ-Fall auf die Seite lenken, die formular.inc.php included:
		if ( $error_msg == "" )
		{
			header("Location: bestaetigung.inc.php");
			die();
		}
		else
		{
			header("Location: XXX");
		}

wobei XXX die Seite ist, in der du formular.inc.php normalerweise inkludierst. Das müsste eigentlich funktionieren, und die Änderung umfasst nur die paar Zeilen. Du musst dann nur $error_msg als Parameter noch mit übergeben, sonst geht die verloren!

Dieser Beitrag wurde von MNG bearbeitet: 16. Januar 2007 - 10:10

0

#10 Mitglied ist offline   Picard 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Puffbohne

geschrieben 16. Januar 2007 - 11:34

Probier das doch mal:

Habe das Problem auch gehabt und konnte es so lösen!

echo "<script LANGUAGE=\"JavaScript\">";
echo "top.location.href='link.php'";
echo "</script>";



MFG

Dieser Beitrag wurde von Picard bearbeitet: 16. Januar 2007 - 11:35

MFG

Picard
0

#11 Mitglied ist offline   tobiasndw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.815
  • Beigetreten: 24. September 03
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 16. Januar 2007 - 11:58

an den Anfang der formular-php

ob_start();

...dann der ganze quellcode

und als letztes ganz zum schluss

ob_end_flush();

dann kannst du im Quellcode nach belieben HeaderWeiterleitungen aufrufen
0

#12 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 16. Januar 2007 - 12:38

Beitrag anzeigenZitat (tobiasndw: 16.01.2007, 11:58)

an den Anfang der formular-php

ob_start();

...dann der ganze quellcode

und als letztes ganz zum schluss

ob_end_flush();

dann kannst du im Quellcode nach belieben HeaderWeiterleitungen aufrufen


das nützt eigentlich nix, denn in der formular.php ist vor "header(.." überhaupt keine ausgabe, die gepuffert werden müsste. wenn, dann muß das an den anfang des dokuments, in das die formular.php includiert wird. dann allerdings in verbindung mit einer bedingung, damit es nicht bei allen seiten wirksam ist, sondern nur bei denen, wo man es auch braucht.
Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#13 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

geschrieben 16. Januar 2007 - 12:41

@MNG:
falls die formulardaten noch fehlerhaft sind läuft das skript ja sowieso weiter.
das formular wird ein erstes mal abgeschickt, es ruft sich selber wieder auf und prüft die eingaben, sind diese fehlerfrei greift header("location: ..."), sind sie noch nicht vollständig, dann läuft das skript einfach weiter und gibt die fehlermeldungen, das formular und bereits eingetragene daten wieder.

@tobiasndw:
ich habe habe in die formular.inc.php folgendes eingetragen:
<?php
 
ob_start();
session_start();
...
?>

<html>
...
</html>

<?php

ob_end_flush();

?>

funktioniert leider auch nicht, wie gehabt.

ich werde das mal hochladen und ihr werdet es dann sehen.

@die anderen:
ich werde eure vorschläge noch testen.

DANKE

oh hey gitarrenmann! dann probier ich das nochmal mit dem ob_start() und setze es an anfang und ende der seite, wo alles included wird. ok danke!

Dieser Beitrag wurde von felisse.courage bearbeitet: 16. Januar 2007 - 12:39

0

#14 Mitglied ist offline   tobiasndw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.815
  • Beigetreten: 24. September 03
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 16. Januar 2007 - 13:02

sorry, ich dachte du hast nur die formular-php.

Also es muss um den gesamten Quelltext deiner Website. Dann sollte das funktionieren.
0

#15 Mitglied ist offline   felisse.courage 

  • Gruppe: aktive Mitglieder
  • Beiträge: 211
  • Beigetreten: 03. April 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Dresden
  • Interessen:grafik-/webdesign

geschrieben 16. Januar 2007 - 13:30

ja hey also mit puffern klappt es dann! ich hab alles was vor dem formular kommt damit umschlossen.
so allerdings habe ich jetzt immer noch das problem, dass mein header auf die bestätigungsseite verweist und diese dann allein, ohne drumrum ausgegeben wird. ich könnte natürlich aus der bestätigungsseite eine komplette seite machen mit allem drin, was ich brauche, aber geht es wirklich nicht anders?
jetzt lade ich erstmal eben hoch

Dieser Beitrag wurde von felisse.courage bearbeitet: 13. Februar 2007 - 12:06

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0