[Webprogrammierung: Formular wird nicht abgesendet, wenn.

Status
Nicht offen für weitere Antworten.
P

Pida

Gast
Hallo,

auf meiner Homepage benutze ich ein Formular, dessen Eingaben anschließend über die mail()-Funktion von PHP versendet werden.

Wenn der Benutzer auf 'Absenden' klickt, geschehen vor dem Versenden einige Abfragen, z.B. auf Spam-Begriffe. Bei einem Treffer rufe ich die() auf und mache eine entsprechende Mitteilung.

Nun mein Problem: Wenn der Benutzer
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:
<?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("
<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("
<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 ("
<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 ("
<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("
<center>ACHTUNG: Bitte nicht '$kandidat' benutzen. 
       Ihre Anfrage wurde nicht &bermittelt. Nutzen Sie den Zur&ck-Button.

        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">
 

Creativ

Aktives Mitglied
Kontrolliere doch einfach mal per
echo "test";
an welcher Stelle er abbricht.

Hab beim überflogen aber erstmal keinen Fehler gesehen.

Ist vielleicht wegen des Zurück-Buttons dann die REQUEST_METHOD GET und nicht mehr POST?
 
P

Pida

Gast
Danke Creativ,

das ist es ja: Anscheinend wird gar nicht abgebrochen. Die 'Danke-Meldung' erscheint, obwohl sie ganz am Ende des Quelltextes steht.

Die Request-Methode ist es auch nicht:
1) Müsste dann eine entspr. Meldung erscheinen
2) Ist sie ja durchaus POST: Ich drücke ja nach dem erneuten Aufruf des Formulars wieder auf 'senden'

Viele Grüße
Pida
 

manidu

Mitglied
Naja... Deine "Danke-Meldung" steht im HTML-Code, nicht im PHP-Code...

Egal wo der PHP-Code abbricht, wird also auch deine Dankesmeldung erscheinen... ;)

Mach einfach das, was Creativ gemeint hat: Füg nach jedem "Absatz" ein 'echo "test1"', 'echo "test2"', u.s.w. ein. Dann weißt du, wo der Fehler liegt.
 
P

Pida

Gast
Danke nochmal,

@Manidu: Das trifft nicht zu, die Meldung wird nach einem 'die' auch nicht angezeigt.

Es hat sich jetzt aber rausgestellt, dass das Problem bei meinem Provider lag; es war wohl nur ein Zufall, dass es jeweils bei 'zweiten Versuchen' aufgetreten ist.

Viele Grüße
Pida
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben