From a116b30df7855b6d7b93a340f5b6be723c917bf2 Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 17 Mar 2026 10:06:44 +0100 Subject: [PATCH] =?UTF-8?q?[ui]=20Extrahov=C3=A1na=20kontrola=20s=C3=ADly?= =?UTF-8?q?=20hesla=20do=20samostatn=C3=A9ho=20JS=20souboru,=20p=C5=99id?= =?UTF-8?q?=C3=A1na=20kontrola=20minim=C3=A1ln=C3=AD=20d=C3=A9lky=20[ui]?= =?UTF-8?q?=20registrace.php=20=E2=80=93=20pou=C5=BEit=20spole=C4=8Dn?= =?UTF-8?q?=C3=BD=20JS=20pro=20kontrolu=20hesla=20[ui]=20nove=5Fheslo.php?= =?UTF-8?q?=20=E2=80=93=20pou=C5=BEit=20spole=C4=8Dn=C3=BD=20JS=20pro=20ko?= =?UTF-8?q?ntrolu=20hesla,=20opraven=20odkaz=20na=20reset=20[ui]=20admin.p?= =?UTF-8?q?hp=20=E2=80=93=20pou=C5=BEit=20spole=C4=8Dn=C3=BD=20JS=20pro=20?= =?UTF-8?q?kontrolu=20hesla=20[F=C3=81ZE-1][install]=20V=C3=ADcekrokov?= =?UTF-8?q?=C3=BD=20pr=C5=AFb=C4=9Bh=20instalace,=20pou=C5=BEit=20spole?= =?UTF-8?q?=C4=8Dn=C3=BD=20JS=20pro=20kontrolu=20hesla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth/admin.php | 288 ++++++++---------------------------------- auth/install.php | 41 +----- auth/js/heslo-sila.js | 90 +++++++++++++ auth/nove_heslo.php | 80 ++---------- auth/registrace.php | 79 +----------- 5 files changed, 167 insertions(+), 411 deletions(-) create mode 100644 auth/js/heslo-sila.js diff --git a/auth/admin.php b/auth/admin.php index 96e4b39..92b5ef2 100644 --- a/auth/admin.php +++ b/auth/admin.php @@ -2,15 +2,6 @@ // ============================================================ // ADMINISTRAČNÍ ROZHRANÍ // ============================================================ -// Tato stránka je dostupná pouze přihlášenému adminovi. -// Umožňuje: -// - zobrazit seznam uživatelů -// - založit nového uživatele -// - změnit heslo uživatele -// - smazat uživatele -// - zobrazit konfiguraci systému (citlivé údaje skryté) -// - odeslat testovací email -// ============================================================ require_once __DIR__ . '/config.php'; require_once __DIR__ . '/db.php'; @@ -20,12 +11,8 @@ require_once __DIR__ . '/auth.php'; // ------------------------------------------------------------ // KONTROLA: Je přihlášený uživatel admin? // ------------------------------------------------------------ -// auth.php již zajistil, že uživatel je přihlášen (nebo přesměroval). -// Zde navíc kontrolujeme příznak admin. if (!$auth_uzivatel['admin']) { - // Uživatel je přihlášen, ale není admin – - // zobrazíme obecnou chybu (nechceme prozradit, že stránka existuje) http_response_code(404); die('Stránka nenalezena

Stránka nebyla nalezena.

'); } @@ -40,15 +27,14 @@ if (empty($_SESSION['csrf_token'])) { $csrf_token = $_SESSION['csrf_token']; // ------------------------------------------------------------ -// ZPRACOVÁNÍ AKCÍ (POST požadavky) +// ZPRACOVÁNÍ AKCÍ // ------------------------------------------------------------ -$zprava = ''; // zpráva o úspěchu -$chyba = ''; // chybová hláška +$zprava = ''; +$chyba = ''; 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.'; @@ -68,25 +54,19 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $heslo2 = $_POST['heslo2'] ?? ''; $admin = isset($_POST['admin']) ? 1 : 0; - // 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.'; - } - - // Validace hesla - if (empty($chyba) && empty($heslo)) { + } elseif (empty($heslo)) { $chyba = 'Heslo nesmí být prázdné.'; - } elseif (empty($chyba) && mb_strlen($heslo) < HESLO_MIN_DELKA) { + } elseif (mb_strlen($heslo) < HESLO_MIN_DELKA) { $chyba = 'Heslo musí mít alespoň ' . HESLO_MIN_DELKA . ' znaků.'; - } elseif (empty($chyba) && $heslo !== $heslo2) { + } elseif ($heslo !== $heslo2) { $chyba = 'Hesla se neshodují.'; } if (empty($chyba)) { - - // Kontrola, zda email již neexistuje $stmt = $pdo->prepare(" SELECT COUNT(*) AS pocet FROM `" . DB_TABULKA_UZIVATELE . "` @@ -99,7 +79,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } if (empty($chyba)) { - try { $heslo_hash = password_hash($heslo, PASSWORD_DEFAULT); @@ -117,7 +96,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $novy_id = $pdo->lastInsertId(); - // Vytvoříme prázdný řádek v tabulce služby if (DB_TABULKA_SLUZBA !== '') { $stmt2 = $pdo->prepare(" INSERT INTO `" . DB_TABULKA_SLUZBA . "` @@ -157,7 +135,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } if (empty($chyba)) { - try { $heslo_hash = password_hash($heslo, PASSWORD_DEFAULT); @@ -171,8 +148,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ':id' => $uzivatel_id, ]); - // Po změně hesla smažeme všechny remember me tokeny - // tohoto uživatele – odhlásíme ho ze všech zařízení $stmt2 = $pdo->prepare(" DELETE FROM `" . DB_TABULKA_TOKENY . "` WHERE `uzivatel_id` = :uzivatel_id @@ -197,19 +172,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($uzivatel_id <= 0) { $chyba = 'Neplatné ID uživatele.'; - } - - // Admin nesmí smazat sám sebe - if (empty($chyba) && $uzivatel_id === (int) $auth_uzivatel['id']) { + } elseif ($uzivatel_id === (int) $auth_uzivatel['id']) { $chyba = 'Nemůžeš smazat svůj vlastní účet.'; } if (empty($chyba)) { - try { - // Díky FOREIGN KEY s ON DELETE CASCADE se automaticky - // smažou i záznamy v auth_remember_tokens a auth_password_resets - // a v tabulce služby (users) $stmt = $pdo->prepare(" DELETE FROM `" . DB_TABULKA_UZIVATELE . "` WHERE `id` = :id @@ -290,17 +258,12 @@ try {

OK:

-

Chyba:


- -

Seznam uživatelů

@@ -321,35 +284,16 @@ try { - -
- - - - - + + + + +
-   - - - +
@@ -358,7 +302,6 @@ try {
- @@ -367,10 +310,6 @@ try {
- -

Přidat nového uživatele

@@ -380,37 +319,19 @@ try {


- +

-
- +
+
- Síla hesla: zadej heslo + Síla hesla: zadej heslo

-
- +
+

@@ -421,129 +342,68 @@ try {

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


- -

Konfigurace systému

Hodnoty jsou načteny z auth/config.php. Citlivé údaje jsou skryté – zobrazíš je kliknutím.

- - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
KonstantaHodnota
DB_HOST
DB_NAME
DB_USER
KonstantaHodnota
DB_HOST
DB_NAME
DB_USER
DB_PASS - [skryto] - +
DB_TABULKA_UZIVATELE
DB_TABULKA_TOKENY
DB_TABULKA_BRUTE
DB_TABULKA_RESET
DB_TABULKA_SLUZBA
PROJEKT_NAZEV
PROJEKT_URL
AUTH_LOGIN_URL
AUTH_LOGOUT_URL
AUTH_REDIRECT_PO_PRIHLASENI
REGISTRACE_OTEVRENA
VYZADOVAT_PRIHLASENI
SESSION_NAZEV
SESSION_EXPIRACE sekund - ( hodin)
REMEMBER_EXPIRACE sekund - ( dní)
BRUTE_MAX_POKUSU
BRUTE_OKNO sekund - ( minut)
HESLO_MIN_SILA / 4
HESLO_MIN_DELKA znaků
MAIL_ODESILATEL
MAIL_ODESILATEL_JMENO
MAIL_TEST_ADRESA
AUTH_CSS
DB_TABULKA_UZIVATELE
DB_TABULKA_TOKENY
DB_TABULKA_BRUTE
DB_TABULKA_RESET
DB_TABULKA_SLUZBA
PROJEKT_NAZEV
PROJEKT_URL
AUTH_LOGIN_URL
AUTH_LOGOUT_URL
AUTH_REGISTRACE_URL
AUTH_RESET_URL
AUTH_REDIRECT_PO_PRIHLASENI
REGISTRACE_OTEVRENA
VYZADOVAT_PRIHLASENI
SESSION_NAZEV
SESSION_EXPIRACE s ( h)
REMEMBER_EXPIRACE s ( dní)
BRUTE_MAX_POKUSU
BRUTE_OKNO s ( min)
HESLO_MIN_SILA / 4
HESLO_MIN_DELKA znaků
MAIL_ODESILATEL
MAIL_ODESILATEL_JMENO
MAIL_TEST_ADRESA
AUTH_CSS

- -

Test odesílání emailů

-

Odešle testovací email na adresu -(nastaveno v config.php jako MAIL_TEST_ADRESA).

+

Odešle testovací email na adresu .

@@ -553,50 +413,12 @@ try {
- + \ No newline at end of file diff --git a/auth/install.php b/auth/install.php index e40a0ae..2f94351 100644 --- a/auth/install.php +++ b/auth/install.php @@ -11,6 +11,7 @@ // Krok 2 – pokud selže, zobrazí SQL pro ruční zadání do phpMyAdmin // Krok 3 – ověření, že tabulky existují a mají správnou strukturu // Krok 4 – formulář pro vytvoření prvního admina + zámek +// Krok 5 – instalace úspěšně dokončena // // Po úspěšné instalaci se vytvoří soubor install.lock // a tento skript již nepůjde spustit znovu. @@ -132,9 +133,8 @@ function zkontroluj_tabulky(PDO $pdo): array // URČENÍ AKTUÁLNÍHO KROKU // ------------------------------------------------------------ -$krok = 1; // výchozí krok -$chyba = ''; -$zprava = ''; +$krok = 1; +$chyba = ''; // Krok se přenáší přes skryté pole ve formuláři $krok_z_post = (int) ($_POST['krok'] ?? 0); @@ -250,7 +250,7 @@ elseif ($krok_z_post === 4) { } // ------------------------------------------------------------ -// SESTAVENÍ SQL TEXTU PRO ZOBRAZENÍ UŽIVATELI (krok 2) +// SESTAVENÍ SQL TEXTU PRO ZOBRAZENÍ UŽIVATELI (krok 2 a 3) // ------------------------------------------------------------ $sql_pro_zobrazeni = implode(";\n\n", $sql_tabulky) . ';'; @@ -393,37 +393,10 @@ elseif ($krok === 5): ?> + \ No newline at end of file diff --git a/auth/js/heslo-sila.js b/auth/js/heslo-sila.js new file mode 100644 index 0000000..d9ee56a --- /dev/null +++ b/auth/js/heslo-sila.js @@ -0,0 +1,90 @@ +// ============================================================ +// KONTROLA SÍLY HESLA +// ============================================================ +// Tento skript se stará o indikátor síly hesla a blokování +// tlačítka odeslání formuláře. +// +// Předpoklady (musí být v HTML před načtením tohoto skriptu): +// - načtena knihovna zxcvbn +// - definovány proměnné AUTH_HESLO_MIN_SILA a AUTH_HESLO_MIN_DELKA +// (vkládá je PHP přímo do stránky) +// +// Skript hledá na stránce prvky podle ID: +// - input#heslo ... pole pro zadání hesla +// - span#heslo-sila ... zobrazení síly hesla +// - button#tlacitko-odeslat ... tlačítko pro odeslání +// - span#tlacitko-duvod ... vysvětlení proč je tlačítko zakázané +// ============================================================ + +(function () { + + // Popisky síly hesla (index = skóre zxcvbn 0–4) + var POPISKY_SILY = [ + 'Velmi slabé', + 'Slabé', + 'Průměrné', + 'Silné', + 'Velmi silné' + ]; + + var inputHeslo = document.getElementById('heslo'); + var spanSila = document.getElementById('heslo-sila'); + var tlacitko = document.getElementById('tlacitko-odeslat'); + var spanDuvod = document.getElementById('tlacitko-duvod'); + + // Pokud prvky na stránce nejsou (např. zobrazení úspěchu), + // skript tiše skončí + if (!inputHeslo || !spanSila || !tlacitko || !spanDuvod) { + return; + } + + function zkontrolujHeslo() { + var hodnota = inputHeslo.value; + + // Prázdné heslo + if (hodnota.length === 0) { + spanSila.textContent = 'Síla hesla: zadej heslo'; + tlacitko.disabled = true; + spanDuvod.textContent = ' (čekám na zadání hesla)'; + return; + } + + // Kontrola minimální délky + // AUTH_HESLO_MIN_DELKA je definována PHP přímo ve stránce + if (hodnota.length < AUTH_HESLO_MIN_DELKA) { + spanSila.textContent = 'Heslo je příliš krátké (' + + hodnota.length + ' / ' + + AUTH_HESLO_MIN_DELKA + ' znaků)'; + tlacitko.disabled = true; + spanDuvod.textContent = ' (heslo musí mít alespoň ' + + AUTH_HESLO_MIN_DELKA + ' znaků)'; + return; + } + + // Kontrola síly přes zxcvbn + var vysledek = zxcvbn(hodnota); + var skore = vysledek.score; // 0–4 + + spanSila.textContent = 'Síla hesla: ' + + POPISKY_SILY[skore] + + ' (' + skore + '/4)' + + ' · délka: ' + hodnota.length + ' znaků'; + + // Tlačítko je dostupné jen pokud jsou splněny obě podmínky: + // 1) dostatečná délka (zkontrolována výše) + // 2) dostatečná síla (zxcvbn skóre) + if (skore >= AUTH_HESLO_MIN_SILA) { + tlacitko.disabled = false; + spanDuvod.textContent = ''; + } else { + tlacitko.disabled = true; + spanDuvod.textContent = ' (heslo je příliš slabé, ' + + 'potřebuji alespoň ' + + AUTH_HESLO_MIN_SILA + '/4)'; + } + } + + // Spustíme kontrolu při každé změně hesla + inputHeslo.addEventListener('input', zkontrolujHeslo); + +})(); \ No newline at end of file diff --git a/auth/nove_heslo.php b/auth/nove_heslo.php index 71131a2..0782cab 100644 --- a/auth/nove_heslo.php +++ b/auth/nove_heslo.php @@ -2,11 +2,6 @@ // ============================================================ // OBNOVA HESLA – KROK 2 // ============================================================ -// Na tuto stránku přichází uživatel z odkazu v emailu. -// Odkaz obsahuje ID záznamu a plaintext token. -// -// Stránka ověří platnost tokenu a umožní nastavit nové heslo. -// ============================================================ require_once __DIR__ . '/config.php'; require_once __DIR__ . '/db.php'; @@ -21,7 +16,6 @@ session_set_cookie_params([ ]); session_start(); -// Pokud je uživatel přihlášen, přesměrujeme ho if (isset($_SESSION['uzivatel_id'])) { header('Location: ' . AUTH_REDIRECT_PO_PRIHLASENI); exit; @@ -40,16 +34,15 @@ $csrf_token = $_SESSION['csrf_token']; // OVĚŘENÍ ODKAZU (parametry z URL) // ------------------------------------------------------------ -$token_ok = false; // true pokud je token platný -$zaznam_id = 0; // ID záznamu v auth_password_resets -$uzivatel_id = 0; // ID uživatele +$token_ok = false; +$zaznam_id = 0; +$uzivatel_id = 0; $id_z_url = $_GET['id'] ?? ''; $token_z_url = $_GET['token'] ?? ''; if (!empty($id_z_url) && !empty($token_z_url)) { - // Vyhledáme záznam podle ID $stmt = $pdo->prepare(" SELECT `id`, `uzivatel_id`, `token_hash`, `expiruje` FROM `" . DB_TABULKA_RESET . "` @@ -60,12 +53,7 @@ if (!empty($id_z_url) && !empty($token_z_url)) { $zaznam = $stmt->fetch(); if ($zaznam) { - - // Zkontrolujeme expiraci if (time() < strtotime($zaznam['expiruje'])) { - - // Ověříme token (password_verify = konstantní čas, - // ochrana před timing útoky) if (password_verify($token_z_url, $zaznam['token_hash'])) { $token_ok = true; $zaznam_id = $zaznam['id']; @@ -76,7 +64,7 @@ if (!empty($id_z_url) && !empty($token_z_url)) { } // ------------------------------------------------------------ -// ZPRACOVÁNÍ FORMULÁŘE (nastavení nového hesla) +// ZPRACOVÁNÍ FORMULÁŘE // ------------------------------------------------------------ $chyba = ''; @@ -84,7 +72,6 @@ $uspech = false; if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { - // -- 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.'; @@ -95,7 +82,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { $heslo = $_POST['heslo'] ?? ''; $heslo2 = $_POST['heslo2'] ?? ''; - // Validace hesla if (empty($heslo)) { $chyba = 'Heslo nesmí být prázdné.'; } elseif (mb_strlen($heslo) < HESLO_MIN_DELKA) { @@ -108,11 +94,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { if (empty($chyba)) { try { - - // Zahashujeme nové heslo $heslo_hash = password_hash($heslo, PASSWORD_DEFAULT); - // Aktualizujeme heslo uživatele v DB $stmt = $pdo->prepare(" UPDATE `" . DB_TABULKA_UZIVATELE . "` SET `heslo` = :heslo @@ -123,15 +106,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { ':id' => $uzivatel_id, ]); - // Smažeme použitý reset token – je jednorázový $stmt2 = $pdo->prepare(" DELETE FROM `" . DB_TABULKA_RESET . "` WHERE `id` = :id "); $stmt2->execute([':id' => $zaznam_id]); - // Smažeme všechny remember me tokeny tohoto uživatele – - // po změně hesla jsou všechna zařízení odhlášena $stmt3 = $pdo->prepare(" DELETE FROM `" . DB_TABULKA_TOKENY . "` WHERE `uzivatel_id` = :uzivatel_id @@ -174,16 +154,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { -

Tento odkaz pro obnovu hesla je neplatný nebo vypršel.

-

Požádej o - - nový odkaz pro obnovu hesla.

+

Požádej o nový odkaz pro obnovu hesla.

- -

Chyba:

@@ -231,49 +206,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $token_ok) { + \ No newline at end of file diff --git a/auth/registrace.php b/auth/registrace.php index 0d31d2c..385de9f 100644 --- a/auth/registrace.php +++ b/auth/registrace.php @@ -2,15 +2,10 @@ // ============================================================ // REGISTRACE NOVÉHO UŽIVATELE // ============================================================ -// Tento soubor je dostupný pouze pokud je v config.php -// nastaveno REGISTRACE_OTEVRENA = true. -// Jinak registraci provádí pouze admin přes admin.php. -// ============================================================ require_once __DIR__ . '/config.php'; require_once __DIR__ . '/db.php'; -// Spuštění session (stejné nastavení jako v auth.php) session_name(SESSION_NAZEV); session_set_cookie_params([ 'lifetime' => 0, @@ -26,8 +21,6 @@ session_start(); // ------------------------------------------------------------ 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í

'); } @@ -50,13 +43,12 @@ $csrf_token = $_SESSION['csrf_token']; // ZPRACOVÁNÍ FORMULÁŘE // ------------------------------------------------------------ -$chyba = ''; -$uspech = false; +$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.'; @@ -64,14 +56,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 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)) { @@ -81,7 +71,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (empty($chyba)) { - // -- Validace hesla ----------------------------------- if (empty($heslo)) { $chyba = 'Heslo nesmí být prázdné.'; } elseif (mb_strlen($heslo) < HESLO_MIN_DELKA) { @@ -93,37 +82,22 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 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) { + if ($stmt->fetch()['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`) @@ -137,8 +111,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $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 . "` @@ -189,7 +161,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { -

@@ -214,7 +185,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { autocomplete="new-password" >
- Síla hesla: zadej heslo

@@ -230,7 +200,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {

- @@ -245,45 +214,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { + \ No newline at end of file