0, 'path' => '/', 'httponly' => true, 'samesite' => 'Strict', // 'secure' => true, ]); session_start(); // ------------------------------------------------------------ // KONTROLA: Je registrace povolena? // ------------------------------------------------------------ if (!REGISTRACE_OTEVRENA) { // Registrace je uzavřena – zobrazíme informaci a skončíme // Neposíláme HTTP 403, aby útočník nezjistil, že stránka existuje die('Registrace

Registrace nových uživatelů není momentálně dostupná.

Zpět na přihlášení

'); } // Pokud je uživatel již přihlášen, přesměrujeme ho if (isset($_SESSION['uzivatel_id'])) { header('Location: ' . AUTH_REDIRECT_PO_PRIHLASENI); exit; } // ------------------------------------------------------------ // CSRF TOKEN // ------------------------------------------------------------ if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } $csrf_token = $_SESSION['csrf_token']; // ------------------------------------------------------------ // ZPRACOVÁNÍ FORMULÁŘE // ------------------------------------------------------------ $chyba = ''; $uspech = false; $email_hodnota = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // -- Ověření CSRF tokenu ---------------------------------- $csrf_z_formulare = $_POST['csrf_token'] ?? ''; if (!hash_equals($csrf_token, $csrf_z_formulare)) { $chyba = 'Neplatný požadavek. Zkuste stránku obnovit a zkusit znovu.'; } if (empty($chyba)) { // -- Načtení hodnot z formuláře ----------------------- $email = trim($_POST['email'] ?? ''); $heslo = $_POST['heslo'] ?? ''; $heslo2 = $_POST['heslo2'] ?? ''; $email_hodnota = htmlspecialchars($email); // -- Validace emailu ---------------------------------- if (empty($email)) { $chyba = 'Email nesmí být prázdný.'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $chyba = 'Email není platná emailová adresa.'; } } if (empty($chyba)) { // -- Validace hesla ----------------------------------- if (empty($heslo)) { $chyba = 'Heslo nesmí být prázdné.'; } elseif (mb_strlen($heslo) < HESLO_MIN_DELKA) { $chyba = 'Heslo musí mít alespoň ' . HESLO_MIN_DELKA . ' znaků.'; } elseif ($heslo !== $heslo2) { $chyba = 'Hesla se neshodují.'; } } if (empty($chyba)) { // -- Kontrola, zda email již neexistuje --------------- // Používáme stejnou obecnou chybovou hlášku jako při // neúspěšném přihlášení – nezveřejňujeme, které emaily // jsou v systému registrovány (ochrana soukromí). $stmt = $pdo->prepare(" SELECT COUNT(*) AS pocet FROM `" . DB_TABULKA_UZIVATELE . "` WHERE `email` = :email "); $stmt->execute([':email' => $email]); $pocet = $stmt->fetch()['pocet']; if ($pocet > 0) { $chyba = 'Tento email je již registrován.'; // Poznámka: Tato hláška záměrně říká, že email existuje. // Pokud by ti vadilo zveřejňování existence emailů, // změň hlášku na obecnější (např. "Registrace se nezdařila, // zkontroluj zadané údaje."). Pro většinu projektů je ale // přímá hláška přijatelná a uživatelsky přívětivější. } } if (empty($chyba)) { // -- Vše v pořádku – zaregistrujeme uživatele --------- try { // Zahashujeme heslo (nikdy neukládáme plaintext!) $heslo_hash = password_hash($heslo, PASSWORD_DEFAULT); // Vložíme nového uživatele do tabulky auth_users $stmt = $pdo->prepare(" INSERT INTO `" . DB_TABULKA_UZIVATELE . "` (`email`, `heslo`, `admin`) VALUES (:email, :heslo, 0) "); $stmt->execute([ ':email' => $email, ':heslo' => $heslo_hash, ]); $novy_uzivatel_id = $pdo->lastInsertId(); // Pokud existuje tabulka služby, vytvoříme prázdný řádek // (ostatní data si uživatel doplní později v nastavení) if (DB_TABULKA_SLUZBA !== '') { $stmt2 = $pdo->prepare(" INSERT INTO `" . DB_TABULKA_SLUZBA . "` (`uzivatel_id`) VALUES (:uzivatel_id) "); $stmt2->execute([':uzivatel_id' => $novy_uzivatel_id]); } $uspech = true; } catch (PDOException $e) { error_log('Chyba při registraci: ' . $e->getMessage()); $chyba = 'Při registraci došlo k chybě. Zkuste to prosím znovu.'; } } } // ------------------------------------------------------------ // HTML VÝSTUP // ------------------------------------------------------------ ?> Registrace – <?php echo htmlspecialchars(PROJEKT_NAZEV); ?>

Registrace

Registrace proběhla úspěšně!

Můžeš se nyní přihlásit.

Chyba:




Síla hesla: zadej heslo


(čekám na dostatečně silné heslo)

Už máš účet? Přihlas se.