
69823
17.09.2008, aktualisiert am 21.09.2008
PHP E-Mail Formular
https://www.administrator.de/index.php?content=3742c09bfa4f07d6547676ea9 ...
Im obigen Link wird ein Formular vorgestellt, das im 2. Teil auch eine Überprüfung der Einträge im Formularfeld vornimmt. Dieser Vorschlag wird als gelöst gekennzeichnet.
Wir haben nun festgestellt dass mit der Anweisung wie dort gezeigt keine Überprüfung der Eingabe im Formularfeld stattfindet. Das Script ist so übernommen worden wie vorgestellt.
Nur die Eingabefelder wurden entsprechend angepasst.Weiss jemand die Ursache?
Siehe hier:
Im obigen Link wird ein Formular vorgestellt, das im 2. Teil auch eine Überprüfung der Einträge im Formularfeld vornimmt. Dieser Vorschlag wird als gelöst gekennzeichnet.
Wir haben nun festgestellt dass mit der Anweisung wie dort gezeigt keine Überprüfung der Eingabe im Formularfeld stattfindet. Das Script ist so übernommen worden wie vorgestellt.
Nur die Eingabefelder wurden entsprechend angepasst.Weiss jemand die Ursache?
Siehe hier:
<?php
//email script zur Uebermittlung von Formulardaten
$empfaenger = "absender@provider.de"; //hier kommt die email adresse hin, an die die mail geschickt wird
//bestimmen der eingabefelder
$field1 = $_POST['vorname'];
$field2 = $_POST['nachname'];
$field3 = $_POST['strasse'];
$field4 = $_POST['ort'];
$field5 = $_POST['telefon'];
$field6 = $_POST['email'];
$field7 = $_POST['bestellung'];
//aussehen der email die der E-Mail Empfaenger bekommt
$send = '
Vorname des Absenders: '.$_POST['vorname'].'
Nachname des Absenders: '.$_POST['nachname'].'
Strasse und Hausnummer: '.$_POST['strasse'].'
PLZ und Wohnort: '.$_POST['ort'].'
Telefonnummer: '.$_POST['telefon'].'
Die E-Mail Adresse: '.$_POST['email'].'
Folgende Artikel werden bestellt: '.$_POST['bestellung'].'
';
//hier die Überprüfung ob der Vorname eingetragen ist
if(!empty($_POST['vorname'])) {
$check_one = true;
} else {
$check_one = false;
}
//hier die Überprüfung ob der Nachname eingetragen ist
if(!empty($_POST['nachname'])) {
$check_one = true;
} else {
$check_one = false;
}
//hier die Überprüfung ob die Strasse eingetragen ist
if(!empty($_POST['strasse'])) {
$check_one = true;
} else {
$check_one = false;
}
//hier die Überprüfung ob der Ort eingetragen ist
if(!empty($_POST['ort'])) {
$check_one = true;
} else {
$check_one = false;
}
//hier die Überprüfung der E-Mail Adresse
if(!empty($_POST['email'])) {
$check_two = true;
} else {
$check_two = false;
}
$email = preg_replace("#[\;\#\n\r\*\'\"<>&\%\!\(\)\{\}\[\]\?\\/\s]#","",$_POST['email']);
if(!preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/",$email)<1) {
$check_two_alpha = true;
} else {
$check_two_alpha = false;
}
//hier die Überprüfung ob der Bestelltext eingetragen wurde
if(!empty($_POST['bestellung'])) {
$check_three = true;
} else {
$check_three = false;
}
//hier die Sendefunktion der E-Mail
if (mail($empfaenger, 'Neue Bestellung', $send, $from))
{
echo "Ihre E-Mail wurde erfolgreich an den Empfänger weitergeleitet.";
}
else
{
echo "Bitte überprüfen Sie Ihre Eingabedaten, ob alle Felder richtig ausgefüllt sind.";
}
/* überprüfung ob der verschicken button gedrückt wurde */
if(isset($_POST['submit'])) {
$check_zero = true;
} else {
$check_zero = false;
}
?>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97205
Url: https://administrator.de/forum/php-e-mail-formular-97205.html
Ausgedruckt am: 05.04.2025 um 15:04 Uhr
11 Kommentare
Neuester Kommentar
Hi Kieler,
ehrlich gesagt blicke ich da auch nicht ganz durch. Ich sehe auch nicht wirklich, dass er was überprüft.
hier frag ich mich a) wo ist die Variable definiert und b) was wird gemacht, wenn die Bedingung nicht wahr ist. Ich sehe nur, dass nach dem else einfach aufgehört wird, dann kommt schon die nächste Abfrage.
Daher würde ich die entsprechenden Snipsets austauschen, evtl. sagt ja noch der ein oder andere was dazu, der nicht so blind ist, wie ich
Bsp.:
Mfg
Mitchell
ehrlich gesagt blicke ich da auch nicht ganz durch. Ich sehe auch nicht wirklich, dass er was überprüft.
$check_two = true;
hier frag ich mich a) wo ist die Variable definiert und b) was wird gemacht, wenn die Bedingung nicht wahr ist. Ich sehe nur, dass nach dem else einfach aufgehört wird, dann kommt schon die nächste Abfrage.
Daher würde ich die entsprechenden Snipsets austauschen, evtl. sagt ja noch der ein oder andere was dazu, der nicht so blind ist, wie ich
if ($_post|| $_email == "")
{
echo "Sie haben nicht alle Felder ausgefüllt";
}
{
else
echo "Danke für Ihren Eintrag";
}
Mfg
Mitchell

Uiiii Mitchell,
perfekt, machen wir es doch zur Trainings-Aufgabe (wink mit dem Zaunpfahl), dieses Problemchen zu lösen...
(und der Regex für die Email-Adresse sieht auch grausig aus!)
Lonesome Walker
perfekt, machen wir es doch zur Trainings-Aufgabe (wink mit dem Zaunpfahl), dieses Problemchen zu lösen...
(und der Regex für die Email-Adresse sieht auch grausig aus!)
Lonesome Walker

Hey, das hier ist ein Support-Forum, d.h. HILFE FREIWILLIG.
Suchst Du professionellen Support, besser einen Freelancer buchen, der das gegen Geld macht.
Lonesome Walker
Suchst Du professionellen Support, besser einen Freelancer buchen, der das gegen Geld macht.
Lonesome Walker
Was muss man tun um eine Antwort zu bekommen?
diese Frage nicht stellen, dir wird hier kostenlos und gerne geholfen, aber nicht auf Hetze.
Ich sehe in deiner Sendefunktion keine Funktion zum Senden
mail($empfaenger, "Neue Bestellung", $send, "From: $from ");
die Variable $from würde ich aber noch definieren.
Wer hat nun bitte das Know How?
Haben viele hier, aber momentan versuche ich es mal *gg*
Mfg
Mitchell
PS: LSW, dein Zaunpfahl steckt mir mittlerweile schon im Auge ^^
Moin moin.
Natürlich wird die Email bzw. der Hinweis des verschickens __immer__ verschickt/ausgegeben.
Schauen wir uns das doch einmal an (verkürzte Version):So ist das Script quasi in drei Teile unterteilt:
Als Beispiel: Vor dem versenden der Email wird nicht einmal geprüft ob die Eingabedaten wirklich korrekt sind und die Email versandt werden darf !
Bei mir sieht das seit einiger Zeit ungefähr so aus:Was haben wir nun hier !?
Diese Datei ist eigentlich in zwei Abschnitte unterteilt:
Fangen wir beim Formular an, ein paar Eingabefelder und etwas PHP, diese dient zur Wiederanzeige der Eingaben bei einem Fehler damit der Benutzer nicht wieder komplett von vorne beginnen muss.
Wenn es einen Fehle bei den Eingaben gab [$form_error==TRUE] wird die Eingabe, andernfalls der Standardwert als Feldinhalt angezeigt.
Im darüber liegendem PHP wird zuerst geprüft ob das Formular überhaupt abgeschickt wurde [isset($_POST['send_form'])==TRUE].
Danach werden die Eingaben, sofern welche gemacht wurden, in Variablen gespeichert - oder NULL bei keiner Eingabe.
Folgend werden die gesetzten Variablen geprüft (die eigentliche Eingabenprüfung). Hier müssen wird zwischen pflicht und optionalen Eingaben unterscheiden (3. und 4. sind optional).
Wenn sich jedoch ein oder mehrere Elemente in dem Array befinden bedeutet dies, das eine Eingabe nicht unseren Vorgaben entspricht und die Email nicht versandt werden soll.
Anstelle dessen geben wir die Elemente aus dem Array aus um den Benutzer auf seine "unerwünschten" Eingaben aufmerksam zu machen. Hier kommt auch der PHP-Code innerhalb des Formulars zum Einsatz, das die gemachten Eingaben wieder anzeigt um dem Benutzer unnötiges wiederholen zu ersparen - was eine schnell Korrektur der Eingaben erlaubt.
Sooo, das war jetzt alles.
Schönen Gruß
~Arano
(Wenn ich das mal so anmerken darf, das "Tutorial" das du verwendet/angegeben hast ist ja mal überhaupt nicht zu gebrauchen oO)
__Edit:__
Vielleicht könnte mal eine(r) der Moderator(en|innen) einen Link von dem "Tutorial"-Thread zu diesem hier setzten um andere Leser gleich darauf aufmerksam zu machen !?
__Edit2:__
Mir ist gerade mal aufgefallen, das die Anzeige des Quelltextes in dem separatem Popup nicht richtig funktioniert !
Ich habe in meinem Quelltext ja unter anderem "</textarea>" stehen, dieses schließt allerdings die Textarea in der mit mein Quelltext angezeigt wird so das alles folgende __abgeschnitten__ wird !
Test:
Natürlich wird die Email bzw. der Hinweis des verschickens __immer__ verschickt/ausgegeben.
Schauen wir uns das doch einmal an (verkürzte Version):
<?php
if( /*check der daten1*/ ){
echo 'daten1 falsch / ungueltig';
} elseif( /*check der daten2*/){
echo 'daten2 falsch / ungueltig';
}
$send = 'Der Inhalt der Email';
if( mail($empfaenger, 'Neue Bestellung', $send, $from) ){
header("Location: http://www.internet.de");
exit;
}
?>
- Die Überprüfung der Eingabedaten
- Das zusammensetzen des Emailinhalt und
- Das Senden der Email
Als Beispiel: Vor dem versenden der Email wird nicht einmal geprüft ob die Eingabedaten wirklich korrekt sind und die Email versandt werden darf !
Bei mir sieht das seit einiger Zeit ungefähr so aus:
<?php
// !! DAS FOLGENDE SCRIPT IST UNGETESTET !!
// !! DAS FOLGENDE SCRIPT IST UNGETESTET !!
$form_error = FALSE;
$form_error_fields = array();
if(isset($_POST['send_form'])){
// kurze grundpruefung:
$vname = isset($_POST['vname']) && trim($_POST['vname'])!='' ? if_magic_quotes($_POST['vname']) : NULL;
$nname = isset($_POST['nname']) && trim($_POST['nname'])!='' ? if_magic_quotes($_POST['nname']) : NULL;
$email = isset($_POST['email']) && trim($_POST['email'])!='' ? if_magic_quotes($_POST['email']) : NULL;
$homep = isset($_POST['homep']) && trim($_POST['homep'])!='' ? if_magic_quotes($_POST['homep']) : NULL;
$text = isset($_POST['text']) && trim($_POST['text'])!='' ? if_magic_quotes($_POST['text']) : NULL;
// erweiterte pruefung:
if(is_null($vname) || !preg_match('/^([a-zäöüß\-. ]{3,20})$/i',$vname) ) $form_error_fields='Vorname';
if(is_null($nname) || !preg_match('/^([a-zäöüß\-. ]{3,20})$/i',$nname) ) $form_error_fields='Nachname';
if(!is_null($email) && !preg_match('/^[a-z0-9]+?[a-z0-9\-_.]+[a-z0-9]+@[a-z0-9]+?[a-z0-9\-_.]+[a-z0-9]+?\.[a-z]{2,5}$/i',$email) ) $form_error_fields='Email';
if(!is_null($homep) && !preg_match('/^(http:\/\/|www.|http:\/\/www.)?[a-z0-9\-_.]+\.[a-z]{2,5}([a-z0-9\-_.:\/?&;=%]*)$/i',$homep)) $form_error_fields='Homepage';
if(is_null($text) || strlen($text)<20 ) $form_error_fields='Text';
// wenn es keinen eingabefehler gab:
if(empty($form_error_fields)){
$form_error = FALSE; // eigentlich unnoetig weil default.
$to = 'meineMail@example.com';
$subject = 'Neue Email von wo auch immer';
$body = "Neu Email von wo auch immer\n\n";
$body .= "Name : $vname $nname\n";
$body .= "Email : $email\n";
$body .= "Homepage : $homep\n";
$body .= "Nachricht: $text\n\n";
$header = "From: $vname $nname <$email>\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";
$header .= "X-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$header .= "Content-Transfer-Encoding: 8bit\n";
// wenn die mail versandt wurde:
if(@mail($to,$subject,$body,$header)){
echo 'Ihre Nachricht wurde erfolgreich versandt.';
// oder
header('Location: http://www.example.com');
// bei einem mail fehler:
} else {
echo 'Ihre Nachricht konnte leider nicht versandt werden,<br>bitte versuchen Sie es später erneut.';
}
// bei einem eingabefehler:
} else {
$form_error = TRUE;
echo 'Die Eingaben der Felder: "'.implode('", "', $form_error_fields).'" wurden nicht akzeptiert !<br>';
}
}
echo '<form action="" method="POST">
<label for="vn">Vorname</label>
<input type="text" name="vname" id="vn" value="'.($form_error ? $vname : 'Max').'"><br>
<label for="nn">Bachname</label>
<input type="text" name="nname" id="nn" value="'.($form_error ? $nname : 'Musterman').'"><br>
<label for="em">Email</label>
<input type="text" name="email" id="em" value="'.($form_error ? $email : 'email@adresse').'"><br>
<label for="hp">Homepage</label>
<input type="text" name="homep" id="hp" value="'.($form_error ? $homep : 'www.example.com').'"><br>
<textarea name="text">'.($form_error ? $text : 'Ihre Nachricht an uns...').'</textarea><br>
<input type="submit" name="send_form" value="Speichern">
</form>';
function if_magic_quotes($string){
/* funktion zur maskierung von sonderzeichen und
umwandlung dieser in htmlentities
- krige sie gerade nicht ausm kopf zusammen, -
- darum einfach nur so -
*/
return addslashes(htmlentities($string));
}
?>
Diese Datei ist eigentlich in zwei Abschnitte unterteilt:
- Die Prüfung und der Email versandt
- Die Ausgabe des Eingabeformulares
- (ganz unten ist noch eine eigene Funktion der vollständigkeit halber )
Fangen wir beim Formular an, ein paar Eingabefelder und etwas PHP, diese dient zur Wiederanzeige der Eingaben bei einem Fehler damit der Benutzer nicht wieder komplett von vorne beginnen muss.
Wenn es einen Fehle bei den Eingaben gab [$form_error==TRUE] wird die Eingabe, andernfalls der Standardwert als Feldinhalt angezeigt.
Im darüber liegendem PHP wird zuerst geprüft ob das Formular überhaupt abgeschickt wurde [isset($_POST['send_form'])==TRUE].
Danach werden die Eingaben, sofern welche gemacht wurden, in Variablen gespeichert - oder NULL bei keiner Eingabe.
Folgend werden die gesetzten Variablen geprüft (die eigentliche Eingabenprüfung). Hier müssen wird zwischen pflicht und optionalen Eingaben unterscheiden (3. und 4. sind optional).
- (pflicht) Wenn das Feld/Variable NULL enthält __oder__ nicht auf den regulären Ausdruck passt, speicher den Namen/Beschreibung in das $form_error_fields-Array.
- (optional) Wenn das Feld/Variable __nicht__ NULL ist __UND__ nicht auf den RegEx passt, speicher den Namen/Beschreibung in das $form_error_fields-Array.
Wenn sich jedoch ein oder mehrere Elemente in dem Array befinden bedeutet dies, das eine Eingabe nicht unseren Vorgaben entspricht und die Email nicht versandt werden soll.
Anstelle dessen geben wir die Elemente aus dem Array aus um den Benutzer auf seine "unerwünschten" Eingaben aufmerksam zu machen. Hier kommt auch der PHP-Code innerhalb des Formulars zum Einsatz, das die gemachten Eingaben wieder anzeigt um dem Benutzer unnötiges wiederholen zu ersparen - was eine schnell Korrektur der Eingaben erlaubt.
Sooo, das war jetzt alles.
Schönen Gruß
~Arano
(Wenn ich das mal so anmerken darf, das "Tutorial" das du verwendet/angegeben hast ist ja mal überhaupt nicht zu gebrauchen oO)
__Edit:__
Vielleicht könnte mal eine(r) der Moderator(en|innen) einen Link von dem "Tutorial"-Thread zu diesem hier setzten um andere Leser gleich darauf aufmerksam zu machen !?
__Edit2:__
Mir ist gerade mal aufgefallen, das die Anzeige des Quelltextes in dem separatem Popup nicht richtig funktioniert !
Ich habe in meinem Quelltext ja unter anderem "</textarea>" stehen, dieses schließt allerdings die Textarea in der mit mein Quelltext angezeigt wird so das alles folgende __abgeschnitten__ wird !
Test:
bla bla bla </textarea><script style="text/javascript">
<!--
alert("XSS-Attack");
-->
</script>