Hallo,
auf meiner Homepage benutze ich ein Formular, dessen Eingaben anschließend über die mail()-Funktion versendet werden.
Wenn der Benutzer auf 'Absenden' klickt, geschehen vor dem Versenden einige Abfragen, z.B. auf Spam-Begriffe. Bie einem Treffer rufe ich die() auf und mache eine entsprechende Mitteilung.
Nun mein Problem: Wenn der Benutzer dann
1) den Back-Button benutzt, um eine Fehleingabe zu korrigieren und dann
2) erneut auf 'Absenden' klickt, wird die mail
nicht versendet.
Besonders unangenehm ist, dass der Benutzer nichts davon bemerkt, sondern ihm für die vermeintlich versendete mail gedankt wird....
Kann man dieses Problem beheben?
Hier der Quelltext:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') die ("Bitte das Kontaktformular benutzen! Es wurden keine Daten übermittelt.");
$sender = $_POST["sender"];
$sendermail = $_POST["sendermail"];
$newsletter = $_POST["newsletter"];
$text = $_POST["text"];
$betreff = "Newsletter";
// Auf Längenüberschreitungen prüfen
if (strlen($sender) > 50 || strlen($sendermail) > 50) {
die("<br><center>ACHTUNG: Name und Mailadresse dürfen 50 Zeichen nicht überschreiten.
Ihre Anfrage wurde nicht übermittelt. Nutzen sie den Zurück-Button.</center>");
}
if (strlen($sender) < 3) {
die("<br><center>ACHTUNG: Der Name darf 3 Zeichen nicht unterschreiten.
Ihre Anfrage wurde nicht übermittelt. Nutzen sie den Zurück-Button.</center>");
}
// (Versteckte) Zeilenumbrüche ablehnen
$sendermail = urldecode($sendermail);
$sender = urldecode($sender);
if ((eregi("(\r|\n)", $sendermail)) || (eregi("(\r|\n)", $sender))) {
die ("<br><center>ACHTUNG: Unter Name und Mailadresse dürfen keine Zeilenumbrüche eingegeben werden.
Ihre Anfrage wurde nicht übermittelt. Nutzen sie den Zurück-Button.</center>");
}
// Kein Text eingegeben UND keine eMail vorhanden?
if (((trim($text)) == "Hier ist Platz für eine persönliche Nachricht oder eine Buchungsanfrage.") && (empty($sendermail))) {
die ("<br><center>ACHTUNG: Bitte wenigstens einen Text oder eine eMail-Adresse eingeben.
Ihre Anfrage wurde nicht übermittelt. Nutzen sie den Zurück-Button.</center>");
}
// Finalen Text zusammensetzen
$text = "$sender sendet folgende Nachricht:
" . $text . "
Die Adresse lautet $sendermail.
Newsletterbezug: $newsletter";
// Spamtest: keywords
$spam = array("lyoliboli", "metaping", "zaylwsduf@mail", "lugarus.com", "hardwarefan.com", "porn", "showfans.com", "vicodin", "provisitas", "paxil", "xanax", "mortgage", "viagra", "tamiflu", "credit loan");
foreach($spam as $kandidat) {
if (strpos(strtolower($text), $kandidat) !== false) {
die("<br><center>ACHTUNG: Bitte nicht '$kandidat' benutzen.
Ihre Anfrage wurde nicht übermittelt. Nutzen Sie den Zurück-Button.<br />
ATTENTION: Please do not use '$kandidat'. Your message has not been submitted. Use the back button.</center>");
}
}
$sender_name = "$sender (Kontaktformular)";
$header = "From: ".$sender_name." <".$sendermail.">\n";
$header .= 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n";
// Mail absenden
mail("john.doe@acme.tld", $betreff, $text, $header);
?>
<p style="margin-top:50px">
<center>Vielen Dank! Über das Menü geht es weiter.</center>
<p style="margin-top:70px">