View file dcms-help.ru/register.php

File size: 5.75Kb
<?php
session_start();
require_once 'config.php';
require_once 'functions.php';

if (isLoggedIn()) {
    redirect('index.php');
}

$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $login = trim($_POST['login']);
    $password = $_POST['password'];
    $password_confirm = $_POST['password_confirm'];
    $email = trim($_POST['email']);
    $captcha_input = $_POST['captcha'];

    // Валидация
    if (strlen($login) > 15) {
        $errors[] = 'Логин не должен превышать 15 символов.';
    }
    if (strlen($password) < 6 || strlen($password) > 30) { // Добавлена проверка минимальной длины пароля
        $errors[] = 'Пароль должен быть от 6 до 30 символов.';
    }
    if ($password !== $password_confirm) {
        $errors[] = 'Пароли не совпадают.';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'Некорректный email.';
    }
    if (!verifyCaptcha($captcha_input)) {
        $errors[] = 'Неверный код капчи.';
    }

    // Проверка уникальности логина и email
    $stmt = $conn->prepare("SELECT id FROM users WHERE login = ?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    if ($stmt->get_result()->num_rows > 0) {
        $errors[] = 'Логин уже занят.';
    }
    $stmt->close();

    $stmt = $conn->prepare("SELECT id FROM users WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    if ($stmt->get_result()->num_rows > 0) {
        $errors[] = 'Email уже используется.';
    }
    $stmt->close();

    // Если нет ошибок, регистрируем пользователя
    if (empty($errors)) {
        // Проверяем, есть ли уже пользователи в базе (первый станет админом)
        $result = $conn->query("SELECT COUNT(*) AS count FROM users");
        $row = $result->fetch_assoc();
        $role = $row['count'] == 0 ? 'admin' : 'user';

        $hashed_password = password_hash($password, PASSWORD_DEFAULT);
        $stmt = $conn->prepare("INSERT INTO users (login, password, email, role) VALUES (?, ?, ?, ?)");
        $stmt->bind_param("ssss", $login, $hashed_password, $email, $role);
        if ($stmt->execute()) {
            $user_id = $stmt->insert_id;
            $_SESSION['user_id'] = $user_id;
            $_SESSION['login'] = $login;
            $_SESSION['role'] = $role;
            redirect('profile.php');
        } else {
            $errors[] = 'Ошибка регистрации. Попробуйте снова.';
        }
        $stmt->close();
    }
}

// Получение списка категорий для сайдбара
$categories = [];
$result = $conn->query("SELECT id, name FROM categories ORDER BY name");
while ($row = $result->fetch_assoc()) {
    $categories[] = $row;
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Регистрация - Dcms-help.ru</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <?php include 'sidebar_left.php'; ?>

        <div class="main-content">
            <h2>Регистрация</h2>
             <div class="tab-container">
                <div class="tab active"><i class="fas fa-user-plus"></i> Создать аккаунт</div> </div>
            <?php if (!empty($errors)): ?>
                <div class="alert alert-error">
                    <?php foreach ($errors as $error): ?>
                        <p><?php echo escape($error); ?></p>
                    <?php endforeach; ?>
                </div>
            <?php endif; ?>
            <form action="register.php" method="POST">
                <p>
                    <label for="login">Логин (не более 15 символов):</label>
                    <input type="text" id="login" name="login" class="input" maxlength="15" required>
                </p>
                <p>
                    <label for="password">Пароль (от 6 до 30 символов):</label> <input type="password" id="password" name="password" class="input" maxlength="30" required>
                </p>
                <p>
                    <label for="password_confirm">Повторите пароль:</label>
                    <input type="password" id="password_confirm" name="password_confirm" class="input" maxlength="30" required>
                </p>
                <p>
                    <label for="email">Email:</label>
                    <input type="email" id="email" name="email" class="input" required>
                </p>
                <p>
                    <label for="captcha">Код капчи:</label>
                    <img src="captcha.php" alt="Капча" style="margin: 5px 0;">
                    <input type="text" id="captcha" name="captcha" class="input" maxlength="4" required>
                </p>
                <button type="submit" class="btn btn-primary"><i class="fas fa-user-plus"></i> Зарегистрироваться</button>
            </form>
        </div>

        <div class="sidebar-right">
            <h3>Категории сайтов</h3>
            <?php
            $result = $conn->query("SELECT id, name FROM categories ORDER BY name");
            while ($row = $result->fetch_assoc()): ?>
                <a href="category.php?id=<?php echo $row['id']; ?>"><i class="fas fa-folder"></i> <?php echo escape($row['name']); ?></a> <?php endwhile; ?>
        </div>
    </div>
</body>
</html>

<?php
$conn->close();
?>