Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11631[/thread]

[PHP] Formular wird nicht abgesendet

Reader: 1


<< >> 1 entry, 1 page
Pida
 2008-04-12 18:45
#108274 #108274
User since
2006-06-09
52 articles
BenutzerIn
[default_avatar]
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:

Code: (dl )
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 &uuml;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&uuml;rfen 50 Zeichen nicht &uuml;berschreiten.
Ihre Anfrage wurde nicht &uuml;bermittelt. Nutzen sie den Zur&uuml;ck-Button.</center>");
}
if (strlen($sender) < 3) {
die("<br><center>ACHTUNG: Der Name darf 3 Zeichen nicht unterschreiten.
Ihre Anfrage wurde nicht &uuml;bermittelt. Nutzen sie den Zur&uuml;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&uuml;che eingegeben werden.
Ihre Anfrage wurde nicht &uuml;bermittelt. Nutzen sie den Zur&uuml;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 &uuml;bermittelt. Nutzen sie den Zur&uuml;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 &uuml;bermittelt. Nutzen Sie den Zur&uuml;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&uuml; geht es weiter.</center>
<p style="margin-top:70px">
<< >> 1 entry, 1 page



View all threads created 2008-04-12 18:45.