66 lines
2.4 KiB
PHP
66 lines
2.4 KiB
PHP
<?php
|
|
// inspired by https://www.mailgun.com/blog/email/double-opt-in-with-php-mailgun/
|
|
|
|
require(dirname(__FILE__) . '/settings.php');
|
|
|
|
$successURL = '/newsletter/confirmed.html';
|
|
$errorURL = '/newsletter/confirm-error.html';
|
|
|
|
// Adds new subscriber to database. Returns an error message on failure, TRUE on success.
|
|
function AddSubscriberToDB($subscriberAddress, $subscriberName = NULL) {
|
|
global $general;
|
|
|
|
try {
|
|
$pdo = getPDO();
|
|
|
|
// create table if it doesn't exist already
|
|
$query = $pdo->prepare($general['sql']['create_table']);
|
|
if ( ! $query->execute() ) {
|
|
error_log('Datenbankfehler beim Prüfen/Erzeugen der Tabelle.');
|
|
return "Ein Fehler ist aufgetreten.";
|
|
}
|
|
|
|
// check if record exists
|
|
$query = $pdo->prepare($general['sql']['read_record']);
|
|
if ( ! $query->execute([':e' => $subscriberAddress]) ) {
|
|
error_log("Datenbankfehler: Adresscheck für Emailadresse {$subscriberAddress} ergab einen Fehler.");
|
|
return 'Datenbankfehler.';
|
|
}
|
|
if ( $query->fetch() ) {
|
|
error_log("Datenbankfehler: Emailadresse {$subscriberAddress} ist bereits eingetragen.");
|
|
return "Emailadresse ist bereits eingetragen.";
|
|
}
|
|
|
|
// create record
|
|
$query = $pdo->prepare($general['sql']['create_record']);
|
|
if ( ( ! $query->execute([':e' => $subscriberAddress, ':n' => $subscriberName]) ) or ( $query->fetch() ) ) {
|
|
error_log("Datenbankfehler: Einfügen von Emailadresse {$subscriberAddress} ergab einen Fehler.");
|
|
return 'Datenbankfehler.';
|
|
}
|
|
} catch(\PDOException $e) {
|
|
error_log("Datenbankfehler: {$e->getMessage()}");
|
|
return $e->getMessage();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
if (isset($_GET['c']) && isset($_GET['e'])) {
|
|
$c = filter_var($_GET['c'], FILTER_SANITIZE_STRING);
|
|
$e = filter_var($_GET['e'], FILTER_SANITIZE_STRING);
|
|
|
|
if ( GetConfirmationHash($e) === $c ) {
|
|
$result = AddSubscriberToDB($e);
|
|
if ($result === TRUE) {
|
|
GracefulExit($successURL, 'Bestätigung erfolgt: Newsletter-Anmeldung bestätigt');
|
|
} elseif (gettype($result == 'string')) {
|
|
GracefulExit($errorURL, "Bestätigung fehlgeschlagen: {$result}");
|
|
} else {
|
|
GracefulExit($errorURL, 'Bestätigung fehlgeschlagen: Unbekannter Fehler');
|
|
}
|
|
} else {
|
|
GracefulExit($errorURL, 'Bestätigung fehlgeschlagen: Fehlerhafter Hash');
|
|
}
|
|
} else {
|
|
GracefulExit($errorURL, 'Bestätigung fehlgeschlagen: Fehlende Emailadresse oder Hash');
|
|
}
|
|
?>
|