In my homepage I defined a form which uses the following script to send a mail:
<?php
/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */
$_emails[0] = "bla@bla.com";
// 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 un开发者_Go百科gü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;
}
}
?>
It works ok, but however, the confirmation that the email was sent is displayed in a new window. I would prefer that the confirmation is displayed instead of the email form. How can I achieve that?
==EDIT=== I added the form:
<form action="./mail.php" 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>
You change the action
in your <form>
to the same script as the form itself is in and check for the $_POST
- if it is filled with something from the form, try to submit it.
Basically, you just put the PHP-code above or below or around your HTML-form. Then I personally add a hidden field like <input type="hidden" name="sent" value="true">
which I can check for in PHP.
if (!empty($_POST['sent']))
{
// Your PHP-Code for sending the mail
}
else
{
// Your HTML form
}
provive a variable that stands for a success-state like:
http://www.ornitholog.li/cms/index.php?page=kontakt&state=1
http://www.ornitholog.li/cms/index.php?page=kontakt&state=2
State 1 -> success
State 2 -> not all fields are proper filled
Or simply add the code into the same file as the form is in.
I take it you wish the confirmation to be shown without having to load a new page? If so, then you must apply Javascript, preferably AJAX, to submit the form, receive the response, remove the form and display the confirmation (all in the same page without a reload).
精彩评论