PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
} catch (PDOException $e) {
// Im Live-Betrieb Fehlermeldung anonymisieren: die("Verbindung fehlgeschlagen.");
$db_error = "Datenbankfehler: " . $e->getMessage();
}
$message = "";
$message_type = ""; // "success" oder "error"
// 2. FORMULAR-VERARBEITUNG
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_lottery'])) {
// Bot-Schutz (Honeypot) abfragen
if (!empty($_POST['website_hp'])) {
die("Spam-Bot erkannt.");
}
$email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);
$firstname = htmlspecialchars(trim($_POST['firstname'] ?? ''), ENT_QUOTES, 'UTF-8');
$lastname = htmlspecialchars(trim($_POST['lastname'] ?? ''), ENT_QUOTES, 'UTF-8');
$terms = isset($_POST['terms_accepted']);
$newsletter = isset($_POST['newsletter_accepted']) ? 1 : 0;
if (!$email || !$terms || empty($firstname) || empty($lastname)) {
$message = "Bitte füllen Sie alle Pflichtfelder aus und akzeptieren Sie die Bedingungen.";
$message_type = "error";
} else {
try {
// Token und IP generieren
$token = bin2hex(random_bytes(32));
$ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
// In die Datenbank schreiben (Tabelle muss vorher via phpMyAdmin angelegt werden)
$stmt = $pdo->prepare("INSERT INTO website_lottery_participants
(email, firstname, lastname, registration_ip, doi_token, newsletter_consented)
VALUES (:email, :firstname, :lastname, :ip, :token, :nl)
ON DUPLICATE KEY UPDATE doi_token = :token, is_confirmed = 0");
$stmt->execute([
':email' => $email,
':firstname' => $firstname,
':lastname' => $lastname,
':ip' => $ip,
':token' => $token,
':nl' => $newsletter
]);
// DOI-E-Mail senden (Hinweis: Nutzen Sie langfristig SMTP für bessere Zustellrate)
$aktuelle_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
// Falls Parameter in der URL sind, diese abschneiden für den sauberen Link
$basis_url = strtok($aktuelle_url, '?');
$bestaetigungs_link = $basis_url . "?action=verify&token=" . $token;
$betreff = "Bestätigung Ihrer Gewinnspiel-Teilnahme";
$text = "Hallo " . $firstname . ",\n\nvielen Dank für Ihre Anmeldung!\n\n";
$text .= "Bitte klicken Sie auf den folgenden Link, um Ihre Teilnahme und ggf. den Newsletter rechtssicher zu bestätigen:\n";
$text .= $bestaetigungs_link . "\n\n";
$text .= "Erst nach diesem Klick landen Sie im Lostopf.\n\nMit freundlichen Grüßen,\nIhr Team";
$header = "From: info@" . $_SERVER['HTTP_HOST'] . "\r\n" .
"Reply-To: info@" . $_SERVER['HTTP_HOST'] . "\r\n" .
"X-Mailer: PHP/" . phpversion();
if(mail($email, $betreff, $text, $header)) {
$message = "Fast geschafft! Wir haben Ihnen eine Bestätigungs-E-Mail geschickt. Bitte prüfen Sie Ihr Postfach (und den Spam-Ordner).";
$message_type = "success";
} else {
$message = "Das System konnte keine E-Mail senden. Bitte wenden Sie sich an den Support.";
$message_type = "error";
}
} catch (PDOException $e) {
$message = "Ein Fehler ist aufgetreten. Eventuell nehmen Sie bereits teil.";
$message_type = "error";
}
}
}
// 3. DOUBLE-OPT-IN VERIFIKATION (Wenn Link geklickt wurde)
if (isset($_GET['action']) && $_GET['action'] === 'verify' && !empty($_GET['token'])) {
$v_token = $_GET['token'];
try {
$stmt = $pdo->prepare("SELECT id, firstname FROM website_lottery_participants WHERE doi_token = :token AND is_confirmed = 0");
$stmt->execute([':token' => $v_token]);
$participant = $stmt->fetch();
if ($participant) {
$update = $pdo->prepare("UPDATE website_lottery_participants SET
is_confirmed = 1,
confirmation_time = CURRENT_TIMESTAMP,
confirmation_ip = :ip
WHERE id = :id");
$update->execute([
':ip' => $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0',
':id' => $participant['id']
]);
$message = "Vielen Dank, " . $participant['firstname'] . "! Ihre Teilnahme wurde erfolgreich bestätigt. Viel Glück!";
$message_type = "success";
} else {
$message = "Dieser Bestätigungslink ist ungültig oder wurde bereits verwendet.";
$message_type = "error";
}
} catch (PDOException $e) {
$message = "Fehler bei der Verifikation.";
$message_type = "error";
}
}
?>
Jetzt am Gewinnspiel teilnehmen!
Füllen Sie das Formular aus, um sich Ihre Gewinnchance zu sichern.