# [Webprogrammierung: Formular wird nicht abgesendet, wenn.



## Pida (13. Apr 2008)

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:

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


----------



## andre111 (13. Apr 2008)

das ist ein java-forum  :bae:


----------



## Jango (13. Apr 2008)

andre111 hat gesagt.:
			
		

> das ist ein java-forum  :bae:


Wo ist dein Problem?



> "andere Programmiersprachen, Datenbanksysteme, OOP, allerlei"



Geltungsbedürftig?


----------



## Creativ (13. Apr 2008)

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?


----------



## Pida (13. Apr 2008)

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 (13. Apr 2008)

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.


----------



## Pida (14. Apr 2008)

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


----------

