Formular überprüfen mit PHP - Hilfe!
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
code
dank
datum
eingabe
element
email
fehler
feld
filtern
form
formular
funktion
inhalt
machen
nachricht
text
tip
tun
zeile
-
Hallo!
Der folgende Code umfasst einen PHP-Form-Mailer mit Eingabeüberprüfung. Der Form-Mailer funktioniert ausgezeichnet, aber die Überprüfungsfunktion nicht! Wenn ich den Namen und die Email-Adresse eingebe, wird das Mail abgesendet, obwohl noch kein Text enthalten ist. Fehlt der Name oder die E-Mail-Adresse funktioniert die Eingabenüberprüfung aber, also die Email wird nicht versendet!!!
Ich arbeite schon sehr lange an diesem Skript und ich komm nicht drauf, warum die Überprüfungsfunktion nur beim Text (logischerweise: textarea-feld) nicht funktioniert. Hat es etwas damit zu tun, dass die anderen 2 Felder, die überprüft werden, <input type=\"text\">-Felder sind?
Bitte um baldige Hilfe!!
<?php function eingabe_check($name,$text,$mail) // Überprüfungsfunktion { if($name==\"\") // Namensüberprüfung { $fehler = $fehler.\" <li>ihr Name</li>\"; } if($text==\"\") // Textüberprüfung { $fehler = $fehler.\"<li>TEXT</li>\"; } if($mail==\"\") // E-Mail-Überprüfung { $fehler = $fehler.\"<li>ihre emailadresse</li>\"; } if($fehler==\"\") { return 1; } else { echo \"Ihre Eingabe ist nicht korrekt. Es fehlt noch: <ul>$fehler</ul> Bitte machen Sie Ihre Eingabe erneut\"; } } // Aufruf der Funktion if(eingabe_check($_POST[\'versender\'], $_POST[\'nachricht\'], $_POST[\'mailer_email\'])==1) { // ab hier ist der Code eigentlich unwichtig function filtern($inhalt) { if(!empty($inhalt)) { $inhalt = strip_tags($inhalt); $inhalt = htmlspecialchars($inhalt); $inhalt = trim($inhalt); $inhalt = stripslashes($inhalt); } return $inhalt; } foreach($_POST as $key => $element) { if($key != \"senden\") { $daten=filtern($element); ${\"mailer_\".$key} = $daten; $maildaten .= \"$key: $daten\\n\"; } } $webmaster=\"irgendwas@irgendwas.com\"; $mailinhalt =\"Website-Kontaktformular\\n\\n E-Mail: $mailer_email\\n\\n $maildaten\"; @mail($webmaster, \"Kontaktformular\", $mailinhalt, \"From: $mailer_email\"); echo \" Die Mail wurde abgeschickt\"; } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
also soweit ich das überblicke ist das alles ok so.
Bei deinem Problem kommt es auf diese Zeile an:
if(eingabe_check($_POST[\'versender\'], $_POST[\'nachricht\'], $_POST[\'mailer_email\'])==1)
daraus resultiert dass dein Formular so aussehen muss mit den Namen:
echo \'<form action=\"\" method=\"post\">\';
echo \'<input type=\"text\" name=\"versender\">\';
echo \'<input type=\"text\" name=\"mailer_email\">\';
echo \'<textarea name=\"nachricht\"></textarea>\';
echo \'<input type=\"submit\" name=\"senden\">\';
echo \'</form>\';
Sollte zum Bsp. bei der Textarea das Name-Attribut fehlen geht´s natürlich nicht. Setze doch evtl mal ein \"var_dump($_POST);\" vor die If Bedingung, dann siehst du was dein Formular so übermittelt.
Grüßle Scout
Tipp: nach der Zeile: echo \"Ihre Eingabe ist nicht korrekt. Es fehlt noch: <ul>$fehler</ul> Bitte machen Sie Ihre Eingabe erneut\"; würde ich noch ein \"return 0;\" einpflegen, damit die Funktion immer einen Rückgabewert hat -
Hallo scout! Vielen Danke für die Antwort!
Der Tipp mit \"var_dump($_POST)\" war super!! Ich hab damit festgestellt, dass ein Leerzeichen bei der textarea übergeben wird, weil ich in guter alter HTML-Manier das Anfangs- und Endtag immer in verschiedene Zeilen schreibe, so auch das textarea-Tag. Dadurch entsteht ein Leerzeichen und wenn man überprüft, ob das Textarea-Feld leer ist, ist es nie leer weil es immer mit einem Leerzeichen \"gefüllt\" ist. Das war der Fehler - echt gemein ^^!
Vielen Danke nochmals für die gute Idee!!
Greets
Beitrag geändert: 14.12.2007 13:27:26 von sinew -
So als kleinen Tipp nebenbei: mit trim() kannst du Leerzeichen am Anfang und Ende einer Variable entfernen. Wenn du das bei dir auf $_POST[\'nachricht\'] anwendest, kannst du deinen html-Quelltext so lassen, wie du ihn hattest.
-
Das hat jetzt zwar nichts mit dem Thema zu tun aber was macht die Zeile:
${\"mailer_\".$key} = $daten;
-
Das hat jetzt zwar nichts mit dem Thema zu tun aber was macht die Zeile:
${\"mailer_\".$key} = $daten;
In der Zeile werden Variablen deklariert...
zum Bsp. wenn $key = \"nachrichten\" ist, dann wird die Variable $mailer_nachrichten angelegt und dieser der Wert $daten zugewiesen. Man kann sozusagen dynamische Variablennamen anlegen
Grüßle -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage