Fehler in kontakt.php

08154711

Erfahrenes Mitglied
Hallo,
Hab ein Kontaktformular dies bringt in folgende Fehlermeldung

1
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
2
Warning: Cannot modify header information - headers already sent

Die Email wird zwar verschickt, aber mit obengenannten Fehlermeldungen.

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=utf-8" />
<title>Test</title>
</head>
<?
	// Session starten und confog.php includen
	session_start();
	include ("config.php");
	
	// CaptchaCodes abfragen
	$CAPTCHA_RandomText = "";
	if (isset($_POST['txtCode'])){
	$CAPTCHA_EnteredText = str_replace("<","",str_replace(">","",str_replace("'","",str_replace("[","",str_replace("]","",$_POST['txtCode'])))));
	}
	if (isset($_SESSION['CAPTCHA_RndText'])) {
	$CAPTCHA_RandomText = $_SESSION['CAPTCHA_RndText'];
	}

	// Eingabefelder abfragen
	$_SESSION['name'] = $_POST['name'];
	$_SESSION['email'] = $_POST['email'];
	$_SESSION['betreff'] = $_POST['betreff'];
	$_SESSION['nachricht'] = $_POST['nachricht'];
	
	$email_i = $_SESSION['email'];
	
	// Email Funktion
	function pruefe_mail($email_i) {
		  if(strstr($email_i, "@")) {
			$email_i = explode ("@", $email_i);
			if(strstr($email_i[1], ".")) $ok = TRUE;
		  }
		  return $ok;
		}
	
	// Eingaben prüfen
	$fehler = "";
	if(!pruefe_mail($email_i) && !empty($email_i)) {
			$fehler .= "<li>Email fehlerhaft!</li>";
			}
			if ($_SESSION['name'] == ""){ 
			$fehler .= "<li>Name fehlt!</li>";
			}
			if ($_SESSION['email'] == ""){ 
			$fehler .= "<li>Email fehlt!</li>";
			}
			if ($_SESSION['betreff'] == ""){ 
			$fehler .= "<li>Betreff fehlt!</li>";
			}
			if ($_SESSION['nachricht'] == ""){ 
			$fehler .= "<li>Nachricht fehlt!</li>";
			}
			if ($CAPTCHA_EnteredText == $CAPTCHA_RandomText and isset($_POST['txtCode']) == true and isset($_SESSION['CAPTCHA_RndText'])){
			$captcha = true;
			} else {
			$fehler .= "<li>Captcha fehlt oder fehlerhaft!</li>";
			}
			
	if ($fehler == ""){
	// Email zumsammensetzen
	$email = "From: " . $_SESSION['email'];
	$nachrichtfertig = $_SESSION['name']. " schrieb: \n\n" . $_SESSION['nachricht'];
	$versand = mail($empfaenger, $_SESSION['betreff'], $nachrichtfertig, $email);
			if ($versand) {
			echo '<h3>Kontaktformular</h3>
			<p>Email ist erfolgreich versendet worden!</p>';
			header("Location: info@lenkercrew.de");
			// Sessionvariablen löschen
			unset($_SESSION['name']);
			unset($_SESSION['email']);
			unset($_SESSION['betreff']);
			unset($_SESSION['nachricht']);
			}
			
	} else {
	echo '<h3>Kontaktformular</h3>';
	echo $fehler;
	echo '<p><a href="kontakt.php">zurück</a></p>';
	}
		

	// Session unset
	unset($_SESSION['CAPTCHA_RndText']);
	
?>
<body>
</body>
</html>
 
Hi, also dazu gibts schon einige Beiträge und gegoogelt gibts dazu auch ne menge Erklärungen, aber da ich auch Lange damit Probleme hatte versuch ich es mal dir zu erklären.

Vor dem Senden der Header darf keine Ausgabe kommen.
Diese hast du aber mit:
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>Test</title> 
</head>
mach das mal raus, vielleicht geht es dann. auch ein einfaches Leerzeichen oder irgendwas löst diesen Fehler aus. Also mach mal die Zeilen da raus das es so beginnt:
PHP:
<?
// Session starten und confog.php includen
session_start();

Oder du schaust dir mal http://www.php.net/manual/de/function.ob-start.php an, das könnte dir auch Helfen.

grüße
crazy_down
 
Zuletzt bearbeitet:
Wie schon gesagt MUSS der Header gesetzt werden bevor eine Ausgabe gemacht wird.

also diesen Block einfach über den DocType

PHP:
    // Session starten und confog.php includen 
    session_start();
 
Hi,
hat geklappt, noch eine Frage ich habe ein Kontaktformular in das ich eine automatische Weiterleitung einfügen möchte
(1)Weiterleitung per

<?php
header("Location: http://www.test.com/");
exit();
?>

Wie kann ich hier eine Verzögerung einbauen, Weiterleitung nach 5sekunden oder so.
Gruss
PS.
per html funktioniert es so
<meta http-equiv="refresh"
content="5; url=http://www.test.com/">
 
also soweit ich weiß geht das nicht. Oder ?
ansonsten kannst du sleep(); verwenden aber dann läd die Seite sozusagen.
Ansonsten nur mit dem Meta-Tag, denn du schon genannt hast oder mit JavaScript.

grüße
 
Mit PHP gar nicht.

Du könntest höchstens mit JavaScript die Seite neu laden mit einem neuen Parameter, der den Refresh aktiviert. Aber wieso nicht die HTML Weiterleitung nutzen?
 
Hallo,

Also wenn ich das <meta http-equiv="refresh" in den Header der Seite einbinde kommt folgende Fehlermeldung

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/web4/40/30/5593230/htdocs/phptest/kontakt_ausw.php:2) in /mnt/web4/40/30/5593230/htdocs/phptest/kontakt_ausw.php on line 4 Kontaktformular

Email ist erfolgreich versendet worden!

es soll ja nur eine Weiterleitung sein das derjenige weiß das die Anfrage abgeschickt worden ist und zum Beispiel wieder auf die Startseite verlinkt wird ohne rumklicken, und zum js - wie sieht es aus wenn derjenige javascript deaktiviert hat?

Gruß
 
Ja weil du dann wieder eine Ausgabe hast. Du darfst das nicht in den Header schreiben.
Oder versuche es so:
PHP:
echo "<meta http-equiv='refresh'content='3; url=http://www.test.com/'>";

Unschön aber sollte funktionieren.
grüße
 
Zurück