Kontaktformular implementieren mit PHP
Posted: Wed Aug 25, 2010 11:04 am
Hallo zusammen
Ich bin mir nicht ganz sicher ob das das richtige Unterforum dafür ist, aber auf jeden Fall habe ich das folgende Problem:
Ich habe ein Formular um mir ein Email zu senden folgendermassen definiert:
Das PHP Script habe ich als benutzerdefinierter Tag folgendermassen definiert:
Nun ist es so, dass Mails die ich damit verschicke nie bei mir an. Allerdings bekomme ich auch keine Fehlermeldung. Früher hatte ich das script in einer einzelnen php Datei auf dem Server gespeichert. Damals hatte alles funktioniert, nur leider wurde dann der echo Teil des PHP Scripts auf einer neuen Seite ausgegeben. Um das zu verhindern, habe ich auf SO den Tip erhalten, das PHP Script so einzufügen.
Kann jemand von euch den Fehler finden? Oder mir eine andere Lösung vorschlagen??
Vielen Dank!
Ich bin mir nicht ganz sicher ob das das richtige Unterforum dafür ist, aber auf jeden Fall habe ich das folgende Problem:
Ich habe ein Formular um mir ein Email zu senden folgendermassen definiert:
Code: Select all
<form action="{$send_mail}" method="post">
<table border="0">
<tbody>
<tr>
<td><label for="absender">Ihr Name:</label></td>
<td><input id="absender" name="absender" size="25" type="text" /></td>
</tr>
<tr>
<td><label for="email">Ihre E-Mail Adresse:</label></td>
<td><input id="email" name="email" size="25" type="text" /></td>
</tr>
<tr>
<td><label for="betreff">Betreff ihrer Nachricht:</label></td>
<td><input id="betreff" name="betreff" size="25" type="betreff" /></td>
</tr>
<tr>
<td><label for="nachricht">Ihre Nachricht:</label></td>
<td><textarea id="nachricht" cols="30" rows="8" name="nachricht"></textarea></td>
</tr>
<tr height="20">
<td></td>
<td></td>
</tr>
<tr>
<th colspan="2" align="center"><input name="abschicken" type="submit" value="Nachricht verschicken" /></th>
</tr>
</tbody>
</table>
</form>
Code: Select all
/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */
$_emails[0] = "sebi@icu.uzh.ch";
// Wenn keine $_POST Daten übermittelt wurden, dann abbrechen
if(!isset($_POST) OR empty($_POST))
{
header("Content-type: text/plain; charset=utf-8");
echo "Es wurden keine Daten übermittelt!";
exit;
}
else
{
// Datum, Uhrzeit und Pfad zum eigenen Script feststellen
$date = date("d.m.Y");
$time = date("H:i");
$host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
// Empfänger feststellen und auf Gültigkeit prüfen
if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ])
AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ]))
{
$recipient = $_emails[ $_POST['recipient'] ];
}
// Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen
elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0]))
{
$recipient = $_emails[0];
}
// Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen
else
{
header("Content-type: text/plain");
echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben.";
exit;
}
// Wenn Betreff übermittelt, diesen verwenden
if(isset($_POST['subject']))
{
$subject = $_POST['subject'];
}
// sonst einen Default Betreff verwenden
else
{
$subject = "Formular Daten von {$_SERVER['HTTP_HOST']}";
}
// E-Mai Kopf generieren
$email = "Formular Eintrag\n"
. "\n"
. "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n"
. "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n"
. "\n"
. "Der Formular Inhalt wird nachfolgend wiedergegeben.\n"
. "\n";
// Alle $_POST Werte an den E-Mail Kopf anhängen
foreach($_POST as $key => $value)
{
if($key == "redirect" OR $key == "recipient" OR $key == "subject")
{
continue;
}
$email .= "Fomular Feld '$key':\n"
. "=============================\n"
. "$value\n"
. "\n";
}
// E-Mail Fuß anfügen
$email .= "=============================\n"
. "Ende der automatisch generierten E-Mail.";
// Versuchen E-Mail zu versenden
if(!mail($recipient, $subject, $email)) {
// Ist dies gescheitert, Fehlermeldung ausgeben
echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten,"
. " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n";
exit;
}
// Wenn gewünscht, auf Bestätigungsseite weiterleiten
if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect'])) {
header("Location: ".$_POST['redirect']);
exit;
} else {
header("Content-type: text/html");
echo "Die E-Mail wurde erfolgreich versendet.";
echo '<br>';
echo '<a href="http://www.ornitholog.li/cms/index.php?page=kontakt">Zurueck</a>';
exit;
}
}
Kann jemand von euch den Fehler finden? Oder mir eine andere Lösung vorschlagen??
Vielen Dank!