Kontakt Formular
Scripte > Form-Mailer
Ein professionelles PHP-Kontaktformular
Dieses sehr aufwendig erstellte Skript versendet eine E-Mail-Nachricht im UTF-8 Format ggf. auch mit Dateianhängen.
Ein Spamschutz, eine Sperrzeit sowie einen Blacklist sorgen ebenfalls für die Sicherheit.
In der Datei "settings.php" werden die hauptsächlichen Grundeinstellungen vorgenommen, die Form und der Style können in der Datei "kontakt_style.css" der Homepage angepasst werden. Textanpassungen müssen in der Datei "kontakt_inc.php" gemäß Markierungen überprüft werden. Für den Datei-Import der Dateianhänge muss auf dem Server ein Verzeichnis "upload" mit Schreibrechten CHMOD 777 angelegt sein (Standard: vorhanden).
In der Datei "settings.php" werden die hauptsächlichen Grundeinstellungen vorgenommen, die Form und der Style können in der Datei "kontakt_style.css" der Homepage angepasst werden. Textanpassungen müssen in der Datei "kontakt_inc.php" gemäß Markierungen überprüft werden. Für den Datei-Import der Dateianhänge muss auf dem Server ein Verzeichnis "upload" mit Schreibrechten CHMOD 777 angelegt sein (Standard: vorhanden).
Hier sind 2 Varianten zur Einbindung erläutert. Sollte dieses Menü auf mehreren Seiten eingesetzt werden, empfiehlt sich die Variante per
<?php include "...."; ?> , um Textänderungen des Menüs nur in einer Datei durchführen zu müssen. Hier muss aber die ausführende Datei die Dateiendung .php aufweisen, um den Code ausführen zu können.
ZIP-Datei in ein beliebiges Verzeichnis auf dem PC entpacken und das Verzeichnis "wsX5Obj" auf den Webserver in das Root-Verzeichnis kopieren.
HEAD-Code in den HEAD-Bereich <head>.....</head> und HTML-Code in den BODY-Bereich <body>.....</body> der aufrufende Datei einfügen.
Eine demo.php ist beigefügt, die zum Test in das Root-Verzeichnis des Webservers kopiert werden kann.
Aufruf: "http://www.domain.tld/demo.php"
Je nach verwendeten Webdesign-Programmen kann es zu Abweichungen in der Darstellung des Formulars kommen.
Sollten mit der Darstellung auf der Homepage zu Zeilenumbruchproblemen kommen, einfach nur in der Datei "mail_style.css" in der Classifizierung
.Obj59_table die Objektbreite width: 600px; oder/und im Skript selbst die Zeile 157 cols='60' entsprechend anpassen.
Im Ordner "img" befinden sich bereits mehrere Button-Sätze, die nur in der Datei "settings.php" eingstellt werden bzw. erweitert werden können.
Es müssen folgende Parameter in der Datei "setting.php" auf dem Server im Verzeichnis "wsX5Obj/Obj59_0" angepasst werden:
Code Datei "settings.php"
// Zeitzone und das aktuelle Datum setzen
date_default_timezone_set("Europe/Berlin");
$Datum = date("d.m.Y H:i");
// PHP Fehlermeldungen (1 um das Formular zu testen) anzeigen:
error_reporting(1); // (0/1)
// Link ausgeben zur Weierleitung, wenn Mail bereits versendet:
$UmlURL = "http://domain.tld"; // Umleitungsseite mit http://
$UmlName = "Startseite"; // Umleitungsname
// Danke-Seite (Datei) einbinden, nach dem absenden des Formulars:
$DankeURL = "wsX5Obj/Obj59_0/inc_danke.html"; // (../) .htm, .html, .php
// Fehler-Seite (Datei) einbinden, wenn die E-Mail nicht versendet werden konnte:
$ErrorURL = "wsX5Obj/Obj59_0/inc_error.html"; // (../) .htm, .html, .php
// Bansperre - Sperrzeit, und IP sowie die Zeit werden gespeichert:
$BanTime = 60; // Sperrzeit in Sekunden
$BanFile = "wsX5Obj/Obj59_0/banlist.txt"; // Die Datei benötigt Schreibrechte!
// Unerwünschte Wörter, E-Mails und IP-Adressen in Liste eintragen. Pro Eintrag eine Zeile!
$BlackFile = "wsX5Obj/Obj59_0/blacklist.txt"; // Die Datei benötigt Schreibrechte!
// Nachricht die automatisch an die E-Mail-Adresse des Besuchers geht:
$Webname = "dein_name"; // Bezeichnung der Homepage
$Signatur = "deine_signatur"; // Name/Signatur des Betreibers
$Betreff = "Nachricht von $Webname"; // Betreff der E-Mail
// Pfad, Größe und Anzahl der Dateien für das Hochladen von Dateien:
$FilePath = "wsX5Obj/Obj59_0/upload"; // Vorgabe, benötigt Schreibrechte!
$Maxgroesse = 512000; // In Bytes (1024 = 1 KB, 1048576 = 1 MB)
$Maxdateien = 1; // Anzahl der maximalen Dateien
### Umrechner: http://www.x5forum.home-wiekau.de/wsX5Tool150_0.php
// Buttonauswahl, vollen Pfad und Dateiname eingeben, auch mit http:// möglich:
$Btn_Vor = "wsX5Obj/Obj59_0/img/vorschau_bl.png"; // Vorschau-Button
$Btn_Abb = "wsX5Obj/Obj59_0/img/abbrechen_bl.png"; // Abbrechen-Button
$Btn_Abs = "wsX5Obj/Obj59_0/img/absenden_bl.png"; // Absenden-Button
// Empfänger - Auswahlliste anpassen! Namen und E-Mail-Adressen hier eintragen:
$Mails = [
"Kontakt Home-Wiekau" => "name@email.tld","Produktion" => "name@email.tld","Werkstatt" => "name@email.tld","Büro" => "name@email.tld","Versand" => "name@email.tld",
];
// Angabe der Datentypen (Mimetypen) die hochgeladen werden dürfen:
$Datentyp = array(
"png" => "image/png","jpg" => "image/jpeg","jpg" => "image/pjpeg","jpeg" => "image/jpeg","gif" => "image/gif","txt" => "text/plain","htm" => "text/html","pdf" => "application/pdf","zip" => "application/x-zip-compressed",
);### Weitere Mimetypen: http://www.x5forum.home-wiekau.de/wsX5Lst56_0.php
Code für den <HEAD> Bereich
<link rel="stylesheet" href="wsX5Obj/Obj59_0/kontakt_style.css" />
<script src="wsX5Obj/Obj59_0/kontakt_len.js"></script>
Code für den <BODY> Bereich
<?php include "wsX5Obj/Obj59_0/kontakt_inc.php"; ?>
alternative Einbindung:
<div align="left" id="Obj59_Anker">
<?php### Fortgeschrittene Anwender können ab hier Änderungen vornehmen. ###include_once 'wsX5Obj/Obj59_0/settings.php';$Dtype = implode(", ", array_unique(array_keys($Datentyp)));$Dsize = ($Maxgroesse >= 1048576) ? number_format(($Maxgroesse / 1024 / 1024), 1, ",", ".") ." MB" : number_format(($Maxgroesse / 1024), 1, ",", ".") . " KB";$anrede = isset($_POST["anrede"]) ? strip_tags(trim($_POST["anrede"])) : ""; // Anrede$array = ["Frau","Herr",];$anredeRB = "";foreach ($array as $key => $value) {$anredeRB .= "<input class='Obj59_input' type='radio' name='anrede' value='" . $value . "' id='rb0" . $key . "'";if (isset($_POST["anrede"])) {if ($_POST["anrede"] == $value) {$anredeRB .= " checked='checked'";}}$anredeRB .= " tabindex='1'> <label class='Obj59_label' for='rb0" . $key . "'>" . $value . "</label> \n ";}$name = isset($_POST["name"]) ? strip_tags(trim($_POST["name"])) : ""; // Name$email = isset($_POST["email"]) ? strip_tags(trim($_POST["email"])) : ""; // E-Mail-Adresse$betreff = isset($_POST["betreff"]) ? strip_tags(trim($_POST["betreff"])) : ""; // Betreff$nachricht = isset($_POST["nachricht"]) ? strip_tags(trim($_POST["nachricht"])) : ""; // Nachricht$KopieCk = isset($_POST["Kopie"]) ? " checked='checked'" : null; // E-Mail Kopie$Mailto = isset($_POST["mail_to"]) ? $Mails[$_POST["mail_to"]] : $Mails[key($Mails)];$MailtoCC = "\n <select class='Obj59_input' name='mail_to'>";foreach ($Mails as $key => $value) {$MailtoCC .= "\n <option value='" . $key . "'" .((isset($_POST["mail_to"]) ? $_POST["mail_to"] : "") == $key ?" selected='selected'" : "") . ">" . $key . "</option>";}$MailtoCC .= "\n </select>\n ";if (file_exists($BanFile) && is_readable($BanFile)) {foreach (file($BanFile) as $element) {list($Ip, $Zeit) = explode("|", $element);if ($Ip == $_SERVER["REMOTE_ADDR"]) {### Weierleitungstext eventuell angepassen. ###if ((floor((time() - $Zeit))) < $BanTime) {exit("<p class='Obj59_report'><a id='Obj59_Anker'></a>Deine Nachricht wurde bereits versendet!<br>" ."<a href='" . $UmlURL . "'>Weiter zur $UmlName.</a></p>");}}}### Benutzereingaben überprüfen, eventuell angepassen. ###}$Fehler = ["File"=>"", "name"=>"", "email"=>"", "betreff"=>"", "nachricht"=>"", "sicherheit"=>""];if (isset($_POST["submit_x"])) {$Fehler["name"] = strlen($_POST["name"]) < 1 ? " Bitte fülle dieses Feld aus!" : "";$Fehler["name"] .= !preg_match("/^[a-zA-Z äöüßáéíóú]/i", $_POST["name"]) ? " Nur Buchstaben und Leerzeichen sind erlaubt!" : "";$Fehler["email"] = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) === false ? " Gebe eine gültige E-Mail-Adresse ein!" : "";$Fehler["betreff"] = strlen($_POST["betreff"]) < 1 ? " Bitte fülle dieses Feld aus!" : "";$Fehler["betreff"] .= !preg_match("/[a-zäöüßáéíóú 0-9]/i", $_POST["betreff"]) ? " Nur Buchstaben und Ziffern sind erlaubt!" : "";$Fehler["nachricht"] = strlen($_POST["nachricht"]) < 10 ? " Bitte fülle dieses Feld aus (min. 10 Zeichen)!" : "";$Fehler["nachricht"] .= strlen($_POST["nachricht"]) > 500 ? " Es sind maximal 500 Zeichen erlaubt!" : "";$Fehler["sicherheit"] = (md5($_POST["zip"]) != $_POST["zip2"]) ? "Die Rechenaufgabe ist leider falsch!" : "";$Files = "";$Filename = "";for ($I = 0; $I < count($_FILES["File"]["name"]); $I++) {if ($I > $Maxdateien) break;if ($_FILES["File"]["name"][$I] != "" && $_FILES["File"]["error"][$I] === UPLOAD_ERR_OK) {$Array = explode(".", basename($_FILES["File"]["name"][$I]));$Filename = substr(preg_replace("/[^a-z0-9_-]/", "", strtolower(strtr($Array[0], "äöüß", "aous"))), 0, 45);if (file_exists($FilePath . "/" . $Filename . "." . strtolower(end($Array)))) {$Filename .= "_" . rand(1, 9999);}$Filename .= "." . strtolower(end($Array));if (in_array($_FILES["File"]["type"][$I], $Datentyp)) {if ($_FILES["File"]["size"][$I] <= $Maxgroesse) {move_uploaded_file($_FILES["File"]["tmp_name"][$I], $FilePath . "/" . $Filename);if (file_exists($FilePath . "/" . $Filename)) {$Files .= "http://" . $_SERVER["SERVER_NAME"] . "/" . $FilePath . "/" . $Filename . ", ";} else {$Fehler["File"] .= "<br>Beim hochladen der Datei „" . $Filename . "” ist leider ein Fehler aufgetreten!";}} else {
$Fehler["File"] .= "<br>Die Datei „" . $Filename . "” ist leider zu groß!";
}} else {$Fehler["File"] .= "<br>Die Datei „" . $Filename . "” hat ein ungültiges Dateiformat!";}}}}$array = [1=>"eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzen", "achtzehn"];$Z1 = mt_rand(1, 9);$Z2 = mt_rand(1, 9);$Spam = " + " . $Z2 . " = " . $array[($Z1 + $Z2)];$Schutz = md5($Z1);// Formular erstellen$Formular = "<form name='Form' action='" . $_SERVER["SCRIPT_NAME"] . "#Obj59_Anker' method='post' enctype='multipart/form-data'><table class='Obj59_table'><tr><td> </td></tr><tr><td width='25%'><label class='Obj59_label'> Anrede: </label></td><td>" . $anredeRB . "</td></tr><tr><td width='25%'><label class='Obj59_label'>Name: <span class='Obj59_pflicht'>✲ " . $Fehler["name"] . "</span></label></td><td><input class='Obj59_input' type='text' name='name' value='" . $name . "' size='35'required='required' placeholder='Vor- und ggf. Nachname' spellcheck='true' tabindex='2'></td></tr><tr><td width='25%'><label class='Obj59_label'>E-Mail-Adresse: <span class='Obj59_pflicht'>✲ " . $Fehler["email"] . "</span></label></td><td><input class='Obj59_input' type='text' name='email' value='" . $email . "' size='35' maxlength='40'required='required' placeholder='Deine E-Mail-Adresse' spellcheck='true' tabindex='3'></td></tr><tr><td width='25%'><label class='Obj59_label'>Betreff: <span class='Obj59_pflicht'>✲ " . $Fehler["betreff"] . "</span></label></td><td><input class='Obj59_input' type='text' name='betreff' value='" . $betreff . "' size='50'required='required' placeholder='Betreff der E-Mail' spellcheck='true' tabindex='4'></td></tr><tr><td width='25%'><label class='Obj59_label'>Nachricht: <span class='Obj59_pflicht'>✲ " . $Fehler["nachricht"] . "</span></label></td><td><small>Du hast noch: <strong id='Length'>500</strong> Zeichen.</small></td></tr><tr><td width='25%'></td><td><textarea class='Obj59_input' name='nachricht' cols='60' rows='8' placeholder='Nachricht an uns'maxlength='500' required='required' onKeyUp='CheckLen()' tabindex='5'>" . $nachricht . "</textarea></td></tr><tr><td width='25%'><label class='Obj59_label'> Dateianhang: </label></td><td><input class='Obj59_file' type='file' name='File[]' size='20' multiple='multiple' tabindex='6'></td></tr><tr><td width='25%'></td><td><small>Dateiformate: " . $Dtype . " - Dateigröße max.: " . $Dsize . " </small></td></tr><tr><td width='25%'><label class='Obj59_label'> Empfänger: </label></td><td>" . $MailtoCC . "<span class='Obj59_hilfe'> Empfänger auswählen.</span></td></tr><tr><td width='25%'><label class='Obj59_label'>Sicherheitsabfrage: <span class='Obj59_pflicht'>✲ " . $Fehler["sicherheit"] . "</span></label></td><td><input class='Obj59_input' type='text' name='zip' size='4' required='required'autocomplete='off'><em>" . $Spam . "</em><input class='Obj59_input' type='hidden' name='zip2' value='" . $Schutz . "'><span class='Obj59_hilfe'> Rechenaufgabe lösen.</span></td></tr><tr><td align='center' colspan='2'><br><input class='Obj59_button' type='image' src='$Btn_Vor' name='vorschau' title='Vorschau zeigen'><input class='Obj59_button' type='image' src='$Btn_Abb' title='Formular abbrechen'formaction='" . $_SERVER["SCRIPT_NAME"] . "'><input class='Obj59_button' type='image' src='$Btn_Abs' name='submit' title='Absenden' tabindex='7'></td></tr><tr><td colspan='2'><small>Alle mit <span class='Obj59_pflicht'>✲</span> markierten Felder sind Pflichtfelder.</small></td></tr></table></form><script>CheckLen();</script>";// Vorschauif (isset($_POST["vorschau_y"])) {echo strip_tags("<blockquote class=\"Obj59_preview\"><h4>Vorschau</h4><b>Anrede:</b> $anrede <br><b>Name:</b> $name <br><b>E-Mail-Adresse:</b> $email <br><b>Betreff:</b> $betreff <br><b>Nachricht:</b> <br>" . nl2br($nachricht) . " <br></blockquote>", "<blockquote><h4><b><br>");}if (isset($_POST["submit_x"])) {if (implode("", $Fehler) == "") {// Bansperre - IP und Zeit speichernif (file_exists($BanFile) && is_writeable($BanFile)) {$Array = array_slice(file($BanFile), -10);$Fh = fopen($BanFile, "w+");fputs($Fh, implode("", $Array) . $_SERVER["REMOTE_ADDR"] . "|" . time() . "|\n");fclose($Fh);}// BlackFile - Nachricht überprüfenif (file_exists($BlackFile) && is_readable($BlackFile)) {$blacklist = array_map('trim', file($BlackFile));$blackstatus = false;foreach ($_POST as $post) {foreach ($blacklist as $black) {if (mb_stristr($post, $black)) {$blackstatus = true;}}}}if ($blackstatus) {exit("<p class='Obj59_report'>Die Nachricht enthält unerwünschte Angaben und wurde <br>" ."als Spam/Werbung identifiziert und daher nicht weitergeleitet. <a href='javascript:history.back();'>Zurück</a></p>");### Daten an eigene E-Mail versenden, eventuell anpassen! ###}$Text = "Gesendet am: $Datum UhrAnrede: $anredeName: $nameE-Mail-Adresse: $emailBetreff: $betreffNachricht: $nachrichtFile: $Files";mb_internal_encoding("UTF-8");$Betreff = mb_encode_mimeheader($betreff, "UTF-8", "Q");$Kopfzeile = "MIME-Version: 1.0;\nFrom: " . mb_encode_mimeheader($name, "UTF-8", "Q") ."<" . $email . ">" . "\nContent-Type: text/plain; Charset=UTF-8;\n";if (mail($Mailto, $Betreff, $Text, $Kopfzeile)) {echo "<div id='Obj59_Anker'></div>";include $DankeURL;} else {include $ErrorURL;### E-Mail Kopie an Versender, eventuell anpassen! ###}$Text = "Vielen Dank. Dein Besuch auf $Webname.Wir haben folgende Nachricht erhalten:Anrede: $anredeName: $nameE-Mail-Adresse: $emailBetreff: $betreffNachricht: $nachrichtLieben Gruss$Signatur";$Betreff = mb_encode_mimeheader($Betreff, "UTF-8", "Q");$Kopfzeile = "MIME-Version: 1.0;\nFrom: " . mb_encode_mimeheader($Signatur, "UTF-8", "Q") ."<" . $Mailto . ">" . "\nContent-Type: text/plain; Charset=UTF-8;\n";if (mail($email, $Betreff, $Text, $Kopfzeile)) {echo "<p class='Obj59_report'>Du erhälst eine Kopie dieser Nachricht an Deine E-Mail-Adresse.</p>";}} else {echo "<p class='Obj59_report'><strong>Eingabefehler!</strong><br>Bitte korrigieren</p>";echo $Formular;}}else {echo $Formular;}?>
</div>
Code Datei "inc_danke.html"
<!-- Text und ggf. Verlinkung nach Bedarf anpassen -->
<p class="Obj59_report">
Die Daten wurden erfolgreich versendet. Bitte warte..., Du wirst in 10 Sekunden zur Startseite geleitet.<meta http-equiv="refresh" content="10; URL=http://x5forum.home-wiekau.de">
</p>
Code Datei "inc_error.html"
<!-- Text und ggf. Verlinkung nach Bedarf anpassen -->
<p class="Obj59_report">
Es ist ein Fehler aufgetreten. Bitte warte..., <br>die Seite wird auf Grund der Sperrzeit erst in 60 Sekunden neu geladen.<meta http-equiv="refresh" content="60; URL=http://x5forum.home-wiekau.de/wsx5obj59.php">
</p>
Code Datei "kontakt_style.css"
H4 { text-decoration: underline; }
td { padding-top: 3px!important; }
small { font-size: 11px; }
.Obj59_table {
background-color: #ECF4FC;font-family: Tahoma, Arial, Sans-Serif;color: #000000;width: 600px;font-size: 12px;text-indent: 20px;border: 1px solid #3E78FD;/*padding: 15px!important;*/}
.Obj59_input {
border: 1px solid #9a9a9a!important;font-family: Tahoma, Arial, Sans-Serif;color: #000000!important;font-size: 13px;transition: box-shadow 0.3s;padding: 3px!important;}
.Obj59_report {
width: 558px;font-size: 14px;font-weight: bold;color: #009500;text-align: center;background-color: #E0E0E0;border: 1px solid #f00;padding: 20px;}
.Obj59_preview {
width: 558px;text-align: left;color: #000000;
background-color: #E0E0E0;
border: 1px solid #f00;padding: 20px;}
.Obj59_hilfe { font-family: Tahoma, Arial, Sans-Serif; font-size: 11px; font-style: Oblique; color: #009500; }
.Obj59_button { width: 130px; border: 1px solid #9a9a9a; background-color: #e1e1e1; margin-left: 15px; }
.Obj59_file { border: 1px solid #9a9a9a; font-size: 12px; }
.Obj59_input:focus, .Obj59_button:focus, .Obj59_file:focus { border: 1px solid #2284E6!important; }
.Obj59_input:hover { border: 1px solid #009500!important; box-shadow: 0px 0px 3px 0px #009500!important; }
.Obj59_button:hover, .Obj59_file:hover { border: 1px solid #009500; box-shadow: 0px 0px 3px 0px #009500; }
.Obj59_label:hover { color: #2284E6; }
» nach oben «