Kontaktformular mit PHP
Heute mal ein Klassiker. In folgendem Tutorial findest du ein fertiges Kontaktformular mit dem du sofort loslegen kannst.
Das HTML-Formular
<div class="container">
<h1 class="display-4">Kontaktformular</h1>
<form action="" method="post">
<input name="security" type="hidden" value="secure">
<div class="row">
<div class="form-group col-md-4">
<label for="SelectGender">Anrede</label>
<select name="gender" class="form-control" id="SelectGender">
<option value="Herr">Herr</option>
<option value="Frau">Frau</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group col-md-6">
<label for="InputName">Name</label>
<input name="name" type="text" class="form-control" id="InputName">
</div>
<div class="form-group col-md-6">
<label for="InputEmail">E-Mail-Adresse <span class="req">Pflichtfeld</span></label>
<input name="email" type="email" class="form-control" id="InputEmail" aria-describedby="emailHelp" required>
</div>
</div>
<div class="form-group">
<label for="TextareaMessage">Nachricht <span class="req">Pflichtfeld</span></label>
<textarea name="message" class="form-control" id="TextareaMessage" rows="3" required></textarea>
</div>
<div class="form-check">
<input type="hidden" name="optin" value="0">
<input type="checkbox" id="opt-in" name="optin" value="1" class="form-check-input" required>
<label for="opt-in">
<strong>HINWEIS</strong> <span class="req">Pflichtfeld</span><br>Ich habe die Hinweise in der <a href="#">Datenschutzerklärung</a> verstanden und stimme diesen hiermit zu.
</label>
</div>
<button type="submit" name="sendform" class="btn btn-dark">Absenden</button>
</form>
</div>
Erklärung: Das HTML-Formular beinhaltet eine select-box für die Anrede, ein Textfeld für den Namen, ein E-Mail Feld für die E-Mail und eine Textarea für die Nachricht. Die Checkbox für die Datenschutzerklärung darf natürlich auch nicht fehlen.
Das PHP-Skript
if ( isset($_POST['sendform']) && ($_POST['security'] == 'secure') ) :
if ( !empty($_POST['email']) ) :
if ( !empty($_POST['optin']) ) :
$gender = htmlspecialchars($_POST['gender']);
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$formmail = 'deineEmail@adresse.de';
if ( preg_match("/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email) ) :
$subject = 'Eine neue Kontaktformularanfrage ist eingetroffen.';
$message = "
<html>
<head>
<title>Neue Anfrage</title>
</head>
<body>
<p>Eine neue Anfrage von " . $gender . " " . $name . " ist eingegangen.</p>
<p>Die hinterlegte E-Mail-Adresse lautet: " . $email . ".</p>
<p><strong>Nachricht:</strong> <br> " . $message . "</p>
</body>
</html>
";
$userSubject = 'Ihre Anfrage bei DeinName.';
$userMessage = "
<html>
<head>
<title>Deine Überschrift in der E-Mail</title>
</head>
<body>
<p>Vielen Dank für Ihre Anfrage. <br>
Sie bekommen schnellstmöglich eine Antwort</p>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: <' . $formmail . '>" . "\r\n";
mail($formmail, $subject, $message, $headers);
mail($email, $userSubject, $userMessage, $headers);
echo '
<div class="container">
<div class="alert alert-success" role="alert">
Anfrage erfolgreich versendet!
</div>
</div>
';
else :
echo '
<div class="container">
<div class="alert alert-danger" role="alert">
Bitte eine korrekte E-Mail-Adresse eingeben.
</div>
</div>
';
endif;
else :
echo '
<div class="container">
<div class="alert alert-danger" role="alert">
Haben Sie die Datenschutzerklärung gelesen? Dann bitte bestätigen.
</div>
</div>
';
endif;
else :
echo '
<div class="container">
<div class="alert alert-danger" role="alert">
Bitte eine E-Mail-Adresse eingeben.
</div>
</div>
';
endif;
endif;
Erklärung:
Zeile 10: Dort muss deine E-Mail-Adresse eingetragen werden.
Zeile 28: Ändere „DeinName“ noch in den deiner Wahl.
Kommentare
Hallo,
vielen Dank für dein tolles Formular! Es funktioniert tadellos. Nur eine Sache stört noch ein wenig. In der Mail an mich steht als Absender „Unbekannter Absender“. Kann man das auch noch anpassen?
Danke für Feedback im Voraus!
Liebe Grüße, MrGreen
Hallo, du könntest dir einfach für die Mail an dich einen weiteren „Header“ bauen. In den packst du dann die E-Mail das Absenders.
Hi, Danke fürs Formular, das ist gut!
2 Punkte habe ich, und zwar:
# PHP-Abfrage ob es sich um eine vernünftige Email-Adresse handelt, habe ich etwas angepasst, weil Original-Abfrage mit einigen unplausiblen Varianten von Email-Adressen Probleme hat.
Meine Abfrage dazu: if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) : …
# Wenn man z.B. Email-Adresse Feld leer lässt und auf „Senden“ klickt, dann taucht eine Meldung „Bitte füllen Sie das Feld aus“ auf.
In dem Zusammenhang ist meine Frage: Wer sorgt dafür, dass diese Meldung auf Deutsch generiert wurde? Ist es möglich es so einzustellen, dass diese und ähnliche Meldungen (z.B. wenn man Nachricht-Feld leer lässt und auf „Senden“ klickt) auf Englisch generiert werden (angenommen man hat ein Kontaktformular mit englischen Überschriften) ?
MfG
Hallo, zu 1: ok und 2: das kommt von deinem Browser. Du kannst aber auch eigene Validation bauen. Siehe z.B. hier: http://jsfiddle.net/Qjkj7/
Hallo, wo kommt das php-Script genau hin? Ich sehe im Browser nach Einbindung mittels „“ nur ASCII-Text des Scripts auf der Seite, das Script selber wird nicht abgearbeitet …
Schau mal hier: https://github.com/programmiertipps/contactform .. das Skript gehört in eine PHP Datei.
Danke – gelesen und verstanden. Übrigens hatte ich in meiner Frage durchaus die richtigen Zeichen verwenden (also Pfeil links/Fragezeichen/php und am Ende Frgezeichen/Pfeil rechts), Ihre Webseite lässt aber nur die An-/Abführungszeichen unten/oben übrig, wenn man die Frage mit Original-Codezeichen abschickt 😉
Hallo
Ich habe mal eine Frage zu dem Script.
Warum fliegen einige Benutzer raus? Die haben eine gültige und zustellfähige E-Mail-Adresse eingegeben und trotzdem sagt das Script „Bitte eine korrekte E-Mail-Adresse eingeben. “
Aber wenn man eine E-Mail-Adresse eingibt, die es nicht gibt bekomme ich eine E-Mail. Beispiel-Adresse: ralf.sturm@kgruetexellenne.de
Danke
Hallo Udo,
das Skript prüft natürlich nicht ob es die E-Mail-Adresse gibt, sondern nur ob die Eingabe soweit passt.
Bei den Adressen die bei dir raus fliegen, müsste man im Detail prüfen wo der Fehler liegt. Hast du dazu eine Beispiel Adresse?
Hallo Markus
Klar habe ich ein Beispiel — entfernt — oder — entfernt —
Probiere noch mal mit der preg_match Abfrage von t.n. if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) :
Ich hab die Lösung: So klappt das: if ( preg_match(„/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix“, $email) ) :
Ich habe die Anführungszeichen geändert.
Danke
Hallo Markus 🙂
vielen Dank für dein Skript, das hat mir sehr geholfen <3
Ich habe nur das Problem, dass beim neuladen der Seite das Formular immer wieder abgeschickt wird – gibt es dafür eine einfache Lösung oder einen Workaround? Vielleicht, dass die Eingaben nach dem Absenden resettet werden. Ich habe nicht direkt was verständliches gefunden bzw das was ich versucht habe, hat nicht funktioniert.
Vielen Dank und liebe Grüße
Hallo Stephie, eine simple Lösung wäre einfach die Seite nach dem Absenden zu refreshen, z.B. mit einem meta refresh:
https://www.w3schools.com/tags/att_meta_http_equiv.asp
Hallo,
die PHP Datei ist doch gar keine. Da fehlen doch noch die PH Zeichen am Anfang und am Ende
Und wo wird auf dem HTML Formular auf die PHP-Datei zugegriffen?
Mit freundlichen Grüßen
Henning Hahn
Hallo Henning, schau dir am besten mal das fertige Skript auf Github bzw. per Download an, dann siehst du den Aufbau.
Hallo,
das war eine ausgezeichnete Hilfestellung für mich. Ich will es auch einmal mit anderen Inhalten versuchen. Ich komme aus einer ganz anderen Programmierecke, möchte einer Person eine Hilfestellung geben und denke, das könnte ein guter Weg sein. (theos, multiuser mit allem pipapo, aber ohne html und co.). Ich bin schon 80 Jahre alt und wirklich Neues nicht mehr lernen. Danke! MfG H.R.
Freut mich geholfen zu haben. Weiterhin viel Erfolg.
Weitere Beiträge
Wie man eine REST API mit Symfony und JWT-Authentifizierung aufbaut
Digitale Barrierefreiheit ab 2025.
Per Typoscript die ID im body-Tag übergeben
Vom Photoshop Design zum fertigen Wordpress Template (Teil 1)