Файл: app/user/sign-up.php
Строк: 36
<?php
if ($user->isAuth()) {
redirect('/');
exit;
}
$form = [
'value' => [
'nick' => isset($_POST['nick']) ? trim($_POST['nick']) : null,
'email' => isset($_POST['email']) ? mb_strtolower(trim($_POST['email'])) : null,
'captcha' => isset($_POST['captcha']) ? mb_strtolower(trim($_POST['captcha'])) : null,
'password' => isset($_POST['password']) ? trim($_POST['password']) : null,
],
'error' => [],
];
if (isset($_POST['submit'])) {
$stmt = $db->prepare("SELECT * FROM
(SELECT COUNT(user_id) AS nick FROM users WHERE nick = :nick) AS nick_check,
(SELECT COUNT(user_id) AS email FROM users WHERE email = :email) AS email_check
");
$stmt->bindParam(':nick', $form['value']['nick'], PDO::PARAM_STR);
$stmt->bindParam(':email', $form['value']['email'], PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_OBJ);
if (empty($form['value']['nick'])) {
$form['error']['nick'] = 'Необходимо ввести логин';
} elseif (!preg_match('#^[a-z0-9-_]{3,25}$#ui', $form['value']['nick'])) {
$form['error']['nick'] = 'В логине разрешены только буквы (A-Za-z) и цифры (0-9), не меньше 3 и не больше 20 символов';
} elseif (!empty($result->nick)) {
$form['error']['nick'] = 'Такой логин уже занят';
}
if (empty($form['value']['email'])) {
$form['error']['email'] = 'Необходимо ввести E-Mail';
} elseif (!filter_var($form['value']['email'], FILTER_VALIDATE_EMAIL)) {
$form['error']['email'] = 'Введите корректный E-Mail';
} elseif (!empty($result->email)) {
$form['error']['email'] = 'Пользователь с таким E-Mail уже зарегистрирован';
}
if (empty($form['value']['password'])) {
$form['error']['password'] = 'Необходимо ввести пароль';
} elseif (mb_strlen($form['value']['password']) < 8) {
$form['error']['password'] = 'Длина пароля не может быть меньше 8 символов';
}
if (empty($form['value']['captcha'])) {
$form['error']['captcha'] = 'Необходимо ввести код с картинки';
} elseif ($form['value']['captcha'] !== @$_SESSION['captcha']) {
$form['error']['captcha'] = 'Неверно введен код с картинки';
}
unset($_SESSION['captcha']);
if (count($form['error']) == 0) {
$password = password_hash($form['value']['password'], PASSWORD_DEFAULT);
$created_at = date('Y-m-d H:i:s', time());
$stmt = $db->prepare("INSERT INTO users SET password = :password, email = :email, nick = :nick");
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->bindParam(':email', $form['value']['email'], PDO::PARAM_STR);
$stmt->bindParam(':nick', $form['value']['nick'], PDO::PARAM_STR);
$stmt->execute();
redirect('/sign-in');
exit;
}
}
echo $template->render('user.sign-up', [
'form' => $form,
]);