Registrierung
';
$error = true;
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'Bitte eine gültige E-Mail-Adresse eingeben
';
$error = true;
}
if(strlen($passwort) == 0) {
echo 'Bitte ein Passwort angeben
';
$error = true;
}
if($passwort != $passwort2) {
echo 'Die Passwörter müssen übereinstimmen
';
$error = true;
}
//Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
if(!$error) {
$statement = $pdo->prepare("SELECT * FROM intern_users WHERE email = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();
if($user !== false) {
echo 'Diese E-Mail-Adresse ist bereits vergeben
';
$error = true;
}
}
//Keine Fehler, wir können den Nutzer registrieren
if (!$error) {
$pdo->beginTransaction();
try {
// Passwort hashen
$passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
// intern_users
$stmt = $pdo->prepare("
INSERT INTO intern_users
(kassenart, plz, strasse, ort, geburtstag, tele, email, passwort, vorname, nachname)
VALUES
(:kassenart, :plz, :strasse, :ort, :geburtstag, :tele, :email, :passwort, :vorname, :nachname)
");
$stmt->execute([
':kassenart' => $kassenart,
':plz' => $plz,
':strasse' => $strasse,
':ort' => $ort,
':geburtstag' => $geburtstag,
':tele' => $tele,
':email' => $email,
':passwort' => $passwort_hash,
':vorname' => $vorname,
':nachname' => $nachname
]);
// user-Tabelle: Insert oder Update über UNIQUE(mail)
$stmt = $pdo->prepare("
INSERT INTO persons
(vorname, nachname, geburtstag, email, tele, ort, plz, strasse)
VALUES
(:vorname, :nachname, :geburtstag, :email, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
geburtstag = VALUES(geburtstag),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse)
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':geburtstag' => $geburtstag,
':email' => $email,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse
]);
// User-ID holen
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = :mail");
$stmt->execute([':mail' => $email]);
$userid = $stmt->fetchColumn();
$pdo->commit();
echo 'Du wurdest erfolgreich registriert. Zum Login
';
$showFormular = false;
// Bisher wurde hier keine Mail verschickt: mailreg blieb 0 und jeder
// neue Benutzer landete nach dem Login auf der Aufforderung, die
// Authentifizierung selbst anzustossen. Den Link gibt es jetzt sofort.
$stmt = $pdo->prepare("SELECT id, vorname, email FROM intern_users WHERE email = :email LIMIT 1");
$stmt->execute([':email' => $email]);
$neuerUser = $stmt->fetch(PDO::FETCH_ASSOC);
if ($neuerUser && sendeAuthentifizierungsMail($pdo, $neuerUser, $organisationsname)) {
echo 'Wir haben Ihnen eine E-Mail geschickt. Bitte bestätigen Sie darin '
. 'Ihre Adresse, damit Sie das Konto vollständig nutzen können.
';
} else {
echo 'Die Bestätigungs-E-Mail konnte gerade nicht versendet werden. '
. 'Sie können sie nach dem Login jederzeit erneut anfordern.
';
}
} catch (Exception $e) {
// Der Mailversand laeuft nach dem commit(). Ohne diese Pruefung
// wuerde ein Fehler dort in rollBack() ohne offene Transaktion
// laufen und die Seite mit einem Fatal Error abbrechen.
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
// Interne Fehlermeldungen gehoeren ins Log, nicht auf die Seite.
error_log('register.php: Registrierung fehlgeschlagen: ' . $e->getMessage());
echo 'Bei der Registrierung ist ein Fehler aufgetreten. '
. 'Bitte versuchen Sie es später noch einmal oder rufen Sie uns an.
';
}
}
}
if($showFormular) {
?>