3.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von petra65 Experte (1.8k Punkte)
Hallo, guten Morgen,

ich möchte auf einer HP ein Kontaktformular einbauen, diese HP läuft über Web.de, und lt. diesem wird php4 und php5 unterstützt - es sollte also funktionieren.

Doch leider erhalte ich die Fehlermeldung Error404.

Der Code sieht folgendermassen aus:
<?php
### Konfiguration Feedback-Formular###
$strEmpfaenger = 'termin@....de';
$strSubject = 'Feedback über www.....de';
$strReturnhtml = 'http://www....de/kontakt_2.html';
$strDelimiter = ":\t";
### Ende Konfiguration ###

if($_POST) {
$strMailtext = "";
while(list($strName,$value) = each($_POST)) {
if(is_array($value)) {
foreach($value as $value_array) {
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else {
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc()) {
$strMailtext = stripslashes($strMailtext);
}
mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>....</title>
</head>
<body>
...
...
<h2>Kontaktformular</h2>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<table id="tableLi" style="margin-left:50px;">
<tr>
<td>Name:</td>
<td><input type="text" name="Absender" /></td>
</tr>
<tr>
<td>Telefon:</td>
<td><input type="text" name="Telefon" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="E-Mail" /></td>
</tr>
<tr>
<td colspan="2" align="left" valign="middle">
<b>Grund des Terminwunsches</b><br>
<input name="box1[]" type="checkbox">&nbsp; Box 1 *<br>
<input name="box2[]" type="checkbox">&nbsp; Box 2 *<br>
<input name="box3[]" type="checkbox">&nbsp; Box 3 *<br>
<input name="Sonstiges[]" type="checkbox">&nbsp; Sonstiges (bitte unten näher erläutern)
</td>
</tr>
<tr>
<td colspan="2">Bemerkungen:</td>
</tr>
<tr>
<td colspan="2">
<textarea name="Bemerkungen" rows="10" cols="50">Bemerkungen</textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Senden" />
<input type="reset" value="Zurücksetzen" />
</td>
</tr>
<tr>
<td colspan="2" style="font-size:11px">
Text
</td>
</tr>
</table>
</form>
...

Beim erstellen der Datei habe ich mich an SelfHtml orientiert (aktuell.de.selfhtml.org/artikel/php/form-mail/)

Noch ein Problem ist, dass die Seite optisch nicht korrekt dargestellt wird, liegt das daran, dass das php ganz am Anfang steht ??
Aber lt. SelfHtml muss es so sein:
Vor dem Aufruf der Funktion header() darf das Script nichts ausgegeben haben ..., weil ansonsten ein Fehler erzeugt wird. Das bedeutet auch, dass vor dem PHP-Code kein HTML-Code sowie keine Leerzeichen und Leerzeilen stehen dürfen. <?php muss also direkt am Dateianfang stehen.

Kann mir jemand sagen warum es nicht funktioniert ???

Vielen Dank und viele Grüße
Petra

11 Antworten

0 Punkte
Beantwortet von
Welche Endung hat die Datei? Wird diese Endung auf deinem Server automatisch als PHP-Datei erkannt?
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo,

ups ... wenn ich die seite in .php umbenenne funktioniert es auch.

Was allerdings nicht klappt, ist der Aufruf der seite kontakt_2.html
$strReturnhtml = 'http://www....de/kontakt_2.html';
Muss das auch eine php-seite sein?

Auch wird die absender-mail-adresse nicht überprüft (auf Gültigkeit), sollte ich wohl noch ändern.

Gruss - Petra
0 Punkte
Beantwortet von
wenn ich die seite in .php umbenenne funktioniert es auch
so war meine Vermutung


$strReturnhtml ... Muss das auch eine php-seite sein?
nein! Wenn die Seite existiert sollte es da eigentlich keine Probleme geben.
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo,

wird über das Formular eine Mail verschickt, so kommt diese einwandfrei an - das einzige was nicht funktioniert ist der Aufruf der Seite Kontakt_2.html ($strReturnhtml = 'http://www....de/kontakt_2.html';) - ist da doch noch irgendein Fehler drin ???
Die Seite existiert und ist hochgeladen !!

Kann eine Info-Meldung evtl. auch mit dem Befehl echo ausgegeben werden?? Ich habe diverse Seiten im Internet durchforstet und diesen Befehl dort mehrfach gefunden - leider kann ich diesen nicht umsetzen ;-(

Viele Grüße - Petra
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Je nachdem wie Dein Webserver konfiguriert ist, könnte Gross- und Kleinschreibung relevant sein...(Kontakt_2.html vs. kontakt_2.html). In Deinem Code ist es kleingeschrieben...
0 Punkte
Beantwortet von Experte (6.4k Punkte)
zu echo:

<?php

echo $strReturnhtml;

?>

<?php

$eintext= "Hier steht Text";

echo $eintext;

echo "<br/>Noch ein Text";

?>

<?="<br/>echo-text, aber verk&uuml;rzt"; ?>
0 Punkte
Beantwortet von
probier dies:

<?php
### Konfiguration Feedback-Formular###
$strEmpfaenger = 'termin@....de';
$strSubject = 'Feedback über www.....de';
$strReturnhtml = 'http://www....de/kontakt_2.html';
$strDelimiter = ":\t";
### Ende Konfiguration ###

if($_POST) {
$strMailtext = "";
while(list($strName,$value) = each($_POST)) {
if(is_array($value)) {
foreach($value as $value_array) {
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else {
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc()) {
$strMailtext = stripslashes($strMailtext);
}
mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
echo '<html><body>Mail erfolgreich versendet</body></html>';
}
else: ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
...



<?php endif; ?>

hier sollte der 2. HTML-Teil nur ausgeführt werden, wenn keine Daten vorliegen, sonst der verkürzte erste.
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Guten Morgen,

ich erhalte folgende Meldung:
Parse error: syntax error, unexpected ':' in /homepages/17/d194031856/htdocs/test4.php on line 29


Line 29 ist: else: ?>

.... muss nun leider arbeiten fahren - kann mich erst heute abend nochmals melden ...

Viele Grüße

Petra
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo,

also - irgendwo ist der "Wurm" drin .... die Verlinkung auf kontakt_2.html (muss übrigens kleingeschrieben werden), und auch der Code aus Antwort 7 funktionieren nicht ....

Nach Absenden kommt einfach eine leere Seite, bzw. oben stehende Fehlermeldung ...

Hat jemand noch eine Idee ???

Gruss - Petra
0 Punkte
Beantwortet von Experte (6.4k Punkte)
3 Dateien im gleichen Verzeichnis:

1. test2.php (heisst bei mir so, kann aber jeden anderen Namen bekommen)
2. kontakt_2.html (wie du es verwendest)
3. kontakt_2.php (hat mehr Möglchkeiten als kontakt_2.html)


zu 1: test2.php


<?php
### Konfiguration Feedback-Formular###
$strEmpfaenger = 'test@localhost';
$strSubject = 'Feedback über www.....de';
/* $strReturnhtml = 'http://www....de/kontakt_2.html'; */
$strDelimiter = ":\t";
### Ende Konfiguration ###

if($_POST) {
$strMailtext = "";
while(list($strName,$value) = each($_POST)) {
if(is_array($value)) {
foreach($value as $value_array) {
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else {
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc()) {
$strMailtext = stripslashes($strMailtext);
}
if (mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)){
echo"<h3>Irgendeine &Uuml;berschrift mit 'echo' kann auch mehr text sein, siehe code </h3>";
echo"<br/>oder<br/>";
include "kontakt_2.html";
echo"<br/><br/>oder";
include "kontakt_2.php";

}
//or die("Die Mail konnte nicht versendet werden.");
else{echo "Die Mail konnte nicht versendet werden.";}
//header("Location: $strReturnhtml");
exit;
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>....</title>
</head>
<body>

<h2>Kontaktformular</h2>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<table id="tableLi" style="margin-left:50px;">
<tr>
<td>Name:</td>
<td><input type="text" name="Absender" /></td>
</tr>
<tr>
<td>Telefon:</td>
<td><input type="text" name="Telefon" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="Email" /></td>
</tr>
<tr>
<td colspan="2" align="left" valign="middle">
<b>Grund des Terminwunsches</b><br>
<input name="box1[]" type="checkbox">&nbsp; Box 1 *<br>
<input name="box2[]" type="checkbox">&nbsp; Box 2 *<br>
<input name="box3[]" type="checkbox">&nbsp; Box 3 *<br>
<input name="Sonstiges[]" type="checkbox">&nbsp; Sonstiges (bitte unten näher erläutern)
</td>
</tr>
<tr>
<td colspan="2">Bemerkungen:</td>
</tr>
<tr>
<td colspan="2">
<textarea name="Bemerkungen" rows="10" cols="50">Bemerkungen</textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Senden" />
<input type="reset" value="Zurücksetzen" />
</td>
</tr>
<tr>
<td colspan="2" style="font-size:11px">
Text
</td>
</tr>
</table>
</form>

</body>
</html>



zu 2: kontakt_2.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head> </head>
<body>
<br/>
kontaktseite 2 per 'include' (=> in kontakt_2.html)

</body>
</html>



zu 3: kontakt_2.php

<?php
echo"<br/><br/>(das ist kontakt_2.php per 'include')";
echo"<br/>Die folgende Nachricht wurde an ... verschickt:<br />".

"<br />Absender: ".$_REQUEST[Absender]
."<br />Telefon: ".$_REQUEST[Telefon]
."<br />Email: ".$_REQUEST[Email]
."<br />Bemerkungen: ".$_REQUEST[Bemerkungen];



?>
...