Загрузка данных


<?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'; ?>