Загрузка данных
<?php
session_start();
require 'db.php';
// если уже вошёл - сразу в кабинет
if (isset($_SESSION['user_id'])) {
header('Location: cabinet.php');
exit;
}
$error = '';
$open_reg = false; // true - показываем регистрацию вместо входа
$email_val = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$action = $_POST['action'] ?? '';
$email = trim($_POST['email'] ?? '');
$email_val = $email;
if ($action === 'login') {
$pass = $_POST['password'] ?? '';
$cap = trim($_POST['captcha'] ?? '');
// сначала капча (регистр не важен)
$right = $_SESSION['captcha'] ?? '';
unset($_SESSION['captcha']); // одна картинка - одна попытка
if ($right === '' || strtoupper($cap) !== $right) {
$error = 'Неверные символы с картинки';
} else {
$st = $db->prepare('SELECT * FROM users WHERE email = ?');
$st->execute([$email]);
$u = $st->fetch(PDO::FETCH_ASSOC);
if ($u && password_verify($pass, $u['password_hash'])) {
login_user($u);
} else {
$error = 'Неверный email или пароль';
}
}
}
if ($action === 'register') {
$open_reg = true;
$last = trim($_POST['last_name'] ?? '');
$first = trim($_POST['first_name'] ?? '');
$middle = trim($_POST['middle_name'] ?? '');
$pass = $_POST['password'] ?? '';
$pass2 = $_POST['password_repeat'] ?? '';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = 'Введите email правильно';
} elseif ($last === '' || $first === '') {
$error = 'Заполните фамилию и имя';
} elseif (strlen($pass) < 8) {
$error = 'Пароль должен быть не короче 8 символов';
} elseif ($pass !== $pass2) {
$error = 'Пароли не совпадают';
} elseif (!isset($_POST['agree'])) {
$error = 'Нужно согласие на обработку данных';
} else {
$st = $db->prepare('SELECT id FROM users WHERE email = ?');
$st->execute([$email]);
if ($st->fetch()) {
$error = 'Этот email уже зарегистрирован, просто войдите';
} else {
// новый человек всегда обычный пользователь, админом через регистрацию стать нельзя
$st = $db->prepare("INSERT INTO users (email, last_name, first_name, middle_name, password_hash, role) VALUES (?, ?, ?, ?, ?, 'user')");
$st->execute([$email, $last, $first, $middle, password_hash($pass, PASSWORD_DEFAULT)]);
login_user(['id' => $db->lastInsertId(), 'role' => 'user']);
}
}
}
}
$title = 'Вход и регистрация';
include 'header.php';
?>
<main class="page-main auth-main">
<!-- регистрация -->
<section class="form-box reg-box <?= $open_reg ? 'open' : '' ?>" id="register">
<h1>Регистрация</h1>
<?php if ($error && $open_reg): ?><p class="msg-err"><?= h($error) ?></p><?php endif; ?>
<form action="auth.php" method="post">
<input type="hidden" name="action" value="register">
<label class="field">Email
<input type="email" name="email" value="<?= $open_reg ? h($email_val) : '' ?>" required>
</label>
<label class="field">Фамилия
<input type="text" name="last_name" required>
</label>
<label class="field">Имя
<input type="text" name="first_name" required>
</label>
<label class="field">Отчество
<input type="text" name="middle_name">
</label>
<label class="field">Пароль
<input type="password" name="password" minlength="8" required>
</label>
<label class="field">Пароль ещё раз
<input type="password" name="password_repeat" minlength="8" required>
</label>
<label class="check agree">
<input type="checkbox" name="agree" required>
<span>Даю <a href="#">согласие</a> на обработку своих персональных данных</span>
</label>
<button class="btn form-btn btn-green" type="submit">Зарегистрироваться</button>
</form>
<p class="form-text">Уже есть аккаунт? <a class="blue" href="auth.php#login">Войти</a></p>
<p class="form-text">Нужна помощь? <a class="blue" href="mailto:academy@teplicy.ru">Написать в поддержку</a></p>
</section>
<!-- вход -->
<section class="form-box login-box" id="login">
<h1>Вход</h1>
<?php if ($error && !$open_reg): ?><p class="msg-err"><?= h($error) ?></p><?php endif; ?>
<form action="auth.php" method="post">
<input type="hidden" name="action" value="login">
<label class="field">Email
<input type="email" name="email" value="<?= $open_reg ? '' : h($email_val) ?>" required>
</label>
<label class="field">Пароль
<input type="password" name="password" required>
</label>
<label class="field">Введите символы с картинки
<img class="captcha-img" src="captcha.php?<?= time() ?>" width="160" height="50" alt="Капча">
<input type="text" name="captcha" autocomplete="off" maxlength="5" required>
</label>
<p class="captcha-link"><a class="blue" href="auth.php">Не видно? Показать другую</a></p>
<button class="btn form-btn btn-green" type="submit">Войти</button>
</form>
<p class="form-text">Впервые здесь? <a class="blue" href="#register">Зарегистрироваться</a></p>
<p class="form-text">Не получается войти? <a class="blue" href="mailto:academy@teplicy.ru">Написать в поддержку</a></p>
</section>
</main>
<?php include 'footer.php'; ?>