diff --git a/main/login.php b/main/login.php index f74ec5a..d89386d 100644 --- a/main/login.php +++ b/main/login.php @@ -1,124 +1,89 @@ setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $debug[] = "Database connected"; -} catch (PDOException $e) { - $debug[] = "Database error: " . $e->getMessage(); - die("Database connection error: " . $e->getMessage()); -} - -$error = ''; -$success = ''; - if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); - $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING); + $username = $_POST['username'] ?? ''; + $password = $_POST['password'] ?? ''; - $debug[] = "Login attempt for: " . $username; - - if ($username && $password) { - try { - $stmt = $db->prepare('SELECT id, password, is_blocked, login_attempts, last_attempt FROM users WHERE username = ?'); - $stmt->execute([$username]); - $user = $stmt->fetch(PDO::FETCH_ASSOC); - - $debug[] = "User found: " . ($user ? 'yes' : 'no'); - + try { + $pdo = new PDO( + "mysql:host={$config['db_host']};dbname={$config['db_name']};charset=utf8mb4", + $config['db_user'], + $config['db_pass'], + [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] + ); + + $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + if ($user['is_blocked']) { + $error = "Аккаунт заблокирован: " . htmlspecialchars($user['block_reason']); + } else { + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['is_moderator'] = $user['is_moderator']; + + $stmt = $pdo->prepare("UPDATE users SET login_attempts = 0, last_attempt = NULL WHERE id = ?"); + $stmt->execute([$user['id']]); + + header("Location: index.php"); + exit; + } + } else { if ($user) { - if ($user['is_blocked']) { - $error = 'Account is blocked'; - $debug[] = "Account blocked"; - } else if ($user['login_attempts'] >= 5 && strtotime($user['last_attempt']) > strtotime('-15 minutes')) { - $error = 'Too many login attempts'; - $debug[] = "Too many attempts"; - } else if (password_verify($password, $user['password'])) { - $stmt = $db->prepare('UPDATE users SET login_attempts = 0, last_attempt = NOW() WHERE id = ?'); + $stmt = $pdo->prepare("UPDATE users SET login_attempts = login_attempts + 1, last_attempt = CURRENT_TIMESTAMP WHERE id = ?"); + $stmt->execute([$user['id']]); + + if ($user['login_attempts'] >= 4) { + $stmt = $pdo->prepare("UPDATE users SET is_blocked = 1, block_reason = 'Превышено количество попыток входа' WHERE id = ?"); $stmt->execute([$user['id']]); - $_SESSION['user_id'] = $user['id']; - $_SESSION['username'] = $username; - $debug[] = "Login successful"; - header('Location: index.php'); - exit; + $error = "Аккаунт заблокирован из-за превышения количества попыток входа"; } else { - $stmt = $db->prepare('UPDATE users SET login_attempts = login_attempts + 1, last_attempt = NOW() WHERE id = ?'); - $stmt->execute([$user['id']]); - $error = 'Invalid password'; - $debug[] = "Invalid password"; + $error = "Неверный пароль"; } } else { - $error = 'User not found'; - $debug[] = "User not found"; + $error = "Пользователь не найден"; } - } catch (PDOException $e) { - $error = 'Server error'; - $debug[] = "SQL Error: " . $e->getMessage(); - $debug[] = "SQL State: " . $e->getCode(); } + } catch (PDOException $e) { + $error = "Ошибка сервера"; } } ?> - +
- -Нет аккаунта? Зарегистрироваться
+Уже есть аккаунт? Войти
+