Kontaktformular mit mail()
Hier ist ein Beispiel für ein einfaches, sicheres Kontaktformular. Es enthält einen CSRF-Token, der verhindert, dass das Formular durch simples neuladen der Seite erneut abgeschickt werden kann und einen Honeypot gegen Spam-Bots. Ein Honeypot ist eine effektive Methode, um Spam-Bots zu erkennen und abzuwehren.
Anklicken zum Kopieren
<?php
session_start();
// Funktion, um POST-Eingaben zu bereinigen
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// Überprüfung, ob das Formular abgesendet wurde
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Überprüfung des CSRF-Tokens
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Ungültiger CSRF-Token');
}
// Überprüfung des Honeypot-Felds
if (!empty($_POST['email_confirm'])) {
die('Spam-Bot erkannt');
}
// Validierung der Benutzereingaben
$name = test_input($_POST['name']);
$email = test_input($_POST['email']);
$message = test_input($_POST['message']);
if (empty($name) || empty($email) || empty($message)) {
die('Bitte füllen Sie alle Pflichtfelder aus.');
}
// Sichere Verarbeitung der Benutzereingaben und Versand der E-Mail
$subject = 'Neue Kontaktanfrage';
$headers = "From: Kontaktformular auf deiner Seite <kontakt@deinewebsite.de>" . "rn";
$headers .= "Reply-To: $name <$email>" . "rn";
$message = wordwrap($message, 70);
// Empfänger-E-Mail-Adresse hier eintragen:
$recipient = 'kontakt@deinewebsite.de';
$mailSent = mail($recipient, $subject, $message, $headers);
if ($mailSent) {
echo 'Vielen Dank für Ihre Nachricht! Wir werden uns in Kürze bei Ihnen melden.';
} else {
echo 'Beim Versenden der Nachricht ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.';
}
// CSRF-Token aktualisieren
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
exit();
}
// Generiere CSRF-Token
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$csrfToken = $_SESSION['csrf_token'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Kontaktformular</title>
</head>
<body>
<h1>Kontaktformular</h1>
<form method="post" action="">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<div>
<label for="name">Name:</label>
<input type="text" name="name" id="name" required>
</div>
<div>
<label for="email">E-Mail:</label>
<input type="email" name="email" id="email" required>
</div>
<div style="display: none;">
<label for="email_confirm">Bitte lassen Sie dieses Feld leer:</label>
<input type="text" name="email_confirm" id="email_confirm">
</div>
<div>
<label for="message">Nachricht:</label>
<textarea name="message" id="message" rows="5" required></textarea>
</div>
<div>
<input type="submit" value="Nachricht senden">
</div>
</form>
</body>
</html>
Du kannst das komplette Script deinen Wünschen nach anpassen. Beachte, dass du in der Zeile
$headers = "From: Kontaktformular auf deiner Seite <kontakt@deinewebsite.de>" . "rn";
eine E-Mail-Adresse verwendest, die die gleiche Domain, wie deine Seite hat. Sonst könnte die E-Mail unter Umständen von einigen Spam-Filtern als Spam eingestuft werden! Aus diesem Grund befindet sich in der nächsten Zeile ein Reply-To. Diese enthält die E-Mail-Adresse des Nutzers und du kannst von deinem E-Mail-Programm direkt auf Antworten klicken um die richtige Adresse im Empfänger-Feld zu haben.
Du kannst dieses Snippet frei nutzen, auch kommerziell. Ein Link zu meiner Webseite wäre als Dankeschön toll. Vielen Dank! :)
Fehler entdeckt? Schreib mir!
Werbung
Du suchst einen günstigen Anbieter für Webhosting? Netcup hat alles, was du suchst!
Sichere dir jetzt einen 5€-Gutschein für Neukunden!