Kontaktformular, Problem mit der Weiterleitung (Header)
Hallo,
mein Kontaktformular läuft soweit ganz gut, aber es gibt ein Fehleranzeige wenn ich mein Formular abschicke.
Folgendes wird angezeigt:
Warning: Cannot modify header information - headers already sent by (output started at /home/netsh10536/html/test/kontakt.php:1) in /home/netsh10536/html/test/kontakt.php on line 19
Line 19 ist die Zeile wo mein header drinsteht.
Angezeigt wird darunter die Kontaktseite und nicht die Dank-Seite.
Hier das script:
<?php
if (!empty($_POST['email'])) {
$datum = date("j.n.y");
$mailbody = $_POST['Name'] . " schrieb am $datum\n\n";
$mailbody .= $_POST['botschaft'] . "\n\n";
$mailbody .= "Bewertung der Homepage: " . $_POST['bewertung'] . "\n";
$mailbody = stripslashes($mailbody);
$email = $_POST['email'];
if (@mail("kontakt@meineseite.de", "E-Mail-Kontakt von www.meineseite.de", $mailbody, "From: $email")) {
header("Location: http://www.meineseite.de/test/email_dank.html");
}
else {
echo "<p>Leider gab es einen Sendefehler!</p>\n";
}
}
?>
Ich weiß nicht was daran falsch ist. Habe auch schon andere Formulare gesehen, mit der selben Zeile. Ich konnte keinen Fehler feststellen.
Kann mir jemand nen Tip geben woran es liegt?
Danke schon mal
Dorionas
Antwort schreiben
Aloha
Ist das ein eigenständiges Script? Oder PHP Befehle in einem HTML Script eingebettet?
Ich hatte solch einen Fehler auch einmal. Bei mir lag es daran, dass ich vor den PHP Befehlen den <head> Bereich des HTML Scripts stehen hatte. Somit erhält der Server schon die Header Informationen durch den HTML <head> und schmeißt die Fehlermeldung.
Wenn das so bei dir ist, setze mal den PHP Teil ganz nach oben vor den <head> Bereich, dann sollte es eigentlich laufen.
Gruß
Des Kasperle
Antwort 2 von Dorionas vom 15.09.2020, 11:27 Options
Das PHP-Script ist vor dem HTML-Code ganz am Anfang.
Antwort 3 von DeluxeStyle vom 15.09.2020, 11:30 Options
zeig mal bitte den ganz quellcode
so lässt sich der Fehler vielleicht besser finden
Schau dir
das hier mal an, vielleicht hilft dir das schon weiter.
Antwort 5 von Dorionas vom 15.09.2020, 16:44 Options
Also hier ist der gesamte code:
<?php
if (!empty($_POST['email'])) {
$datum = date("j.n.y");
$mailbody = $_POST['Name'] . " schrieb am $datum\n\n";
$mailbody .= $_POST['botschaft'] . "\n\n";
$mailbody .= "Bewertung der Homepage: " . $_POST['bewertung'] . "\n";
$mailbody = stripslashes($mailbody);
$email = $_POST['email'];
if (@mail("kontakt@meinepage.de", "E-Mail-Kontakt von www.meinepage.de", $mailbody, "From: $email")) {
header("Location: http://www.meinepage.de/test/email_dank.html");
}
else {
echo "<p>Leider gab es einen Sendefehler!</p>\n";
}
}
?>
<!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>
<title>meinepage - Kontakt</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="meinepage">
<meta content="meinepage" name="keywords">
<meta name=robots content="noindex, nofollow">
<meta name="content-language" content="de">
<meta name="publisher" content="meinepage">
<meta name="author" content="meinepage">
<link href="css/screen.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
<!--
function chkFormular() {
var a="";
if(document.Kontakt.Name.value == "") {
a+=("Bitte geben Sie Ihren Namen ein!\n");
document.Kontakt.Name.focus();
}
if(document.Kontakt.email.value == "") {
a+=("Bitte tragen Sie Ihre E-Mail-Adresse ein!\n");
document.Kontakt.email.focus();
}
if(document.Kontakt.email.value.indexOf("@") == -1) {
a+=("Keine gültige E-Mail-Adresse!\n");
document.Kontakt.email.focus();
}
if(document.Kontakt.botschaft.value == "") {
a+=("Bitte füllen Sie das Betreff-Feld aus!\n");
document.Kontakt.botschaft.focus();
}
if (a!="") {
alert(a);
return false;
}
}
//-->
</script>
<style type="text/css">
<!--
-->
</style>
</head>
<body>
<div id="container">
<div id="header"><h1><span>meinepage</span></h1>
<div id="navigation"><ul>
<li><a href="index.html">Home</a></li>
<li><a href="mich.html">Über Mich</a></li>
<li><a href="projekte.php">Projekte</a></li>
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
</div>
</div>
<div id="leftside">
<div id="secContent">
</div>
</div>
<div id="rightside"><div id="mainContent"><div id="mainAuftrag">
<h2>Kontakt</h2>
<form name="Kontakt" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onSubmit="return chkFormular()">
<table id="auftrag" border=0">
<tr>
<td>Name:*</td>
<td><input type="text" name="Name" value="<?php
if (isset($_POST['Name'])) {
echo htmlspecialchars(stripslashes($_POST['Name']));
}
?>" />
</td>
</tr>
<tr>
<td>E-Mail:*</td>
<td><input type="text" name="email" value="<?php
if (isset($_POST['email'])) {
echo htmlspecialchars(stripslashes($_POST['email']));
}
?>" />
</td>
</tr>
</table>
<p>Ihr Betreff:*<br />
<textarea name="botschaft" cols="25" rows="5"><?php
if (isset($_POST['botschaft'])) {
echo stripslashes($_POST['botschaft']);
}
?>
</textarea><br /></p>
<p>Wie finden Sie meine Homepage?<br>
<input type="radio" name="bewertung" value="sehr gut">sehr gut<br>
<input type="radio" name="bewertung" value="gut">gut<br>
<input type="radio" name="bewertung" value="geht so">geht so<br>
<p><input type="submit" value="Abschicken" name="submit"/></p>
<p>* Pflichtfeld</p>
</form>
</div>
</div></div>
<div id="footer"><div id="footerContent"><a href="impressum.html">Impressum</a> - meinepage© 2008</div></div>
</div>
</body>
</html>
Bin ja mal gespannt, ob ihr den Fehler findet.
Lager doch ma den ganzen PHP-Code im oberen Teil in eine Datei aus. Z.B. formmailer.php. Und dann schreibst du ins action-Attribut einfach den Pfad zu dieser Datei rein. Dann sollte es eigentlich funktionieren
Antwort 7 von Dorionas vom 16.09.2020, 13:20 Options
Hallo,
habe den PHP-Code habe ich nun in eine Formmailer.php ausgelagert, und in das action-attribut die entsprechende Adresse eingefügt.
Ergebniss:
Es funktioniert!!!
Also nochmals vielen Dank für den Tip.
Trotzdem würd ich gerne wissen warum das vorher nicht funktioniert hat.
Kann es sein, dass es mit der vorherigen Zeile zu tun hat:
action="<?php echo $_SERVER['PHP_SELF']; ?>"
Bedeutet diese Zeile nicht, dass der Server das Formular abschickt, und ich dann mit meinem PHP-Code, dies nochmal ausführe?
Weil, laut der Fehleranzeige, wurde ja irgendwas schon vorher ausgeführt.
Ich würd mcih freuen, wenn mir jemand erklären könnte, warum es nun mit der ausgelagerten Datei funktioniert, und warum es vorher nicht ging.
Vielen Dank
Dorionas
Nein ich glaub du hättest das action-Attribut leer lassen müssen. Dann sollte es funktionieren.