Файл: app/join.php
Строк: 80
<?php
Core::only('guest');
$smarty->header('Регистрация');
if (filter_has_var(INPUT_POST, 'submit'))
{
$filter = [
'login' => filter_has_var(INPUT_POST, 'login')
? filter_input(INPUT_POST, 'login', FILTER_UNSAFE_RAW)
: null,
'sex' => filter_has_var(INPUT_POST, 'sex')
? filter_input(INPUT_POST, 'sex', FILTER_SANITIZE_NUMBER_INT)
: null,
'pass1' => filter_has_var(INPUT_POST, 'pass1')
? filter_input(INPUT_POST, 'pass1', FILTER_UNSAFE_RAW)
: null,
'pass2' => filter_has_var(INPUT_POST, 'pass2')
? filter_input(INPUT_POST, 'pass2', FILTER_UNSAFE_RAW)
: null,
'captcha' => filter_has_var(INPUT_POST, 'captcha')
? filter_input(INPUT_POST, 'captcha', FILTER_SANITIZE_NUMBER_INT)
: null
];
foreach (glob('app/*') AS $name)
{
if (strripos(str_replace(['app/', '.php'], '', $name), $filter['login']) !== false)
{
$error = true;
}
}
if (isset($error))
{
$error = 'Запрещенный логин.';
}
elseif (Filter::strlen($filter['login']) < 2 || Filter::strlen($filter['login']) > 32)
{
$error = 'Неверный формат логина.';
}
elseif (preg_match ('/[^A-Za-z0-9-]/', $filter['login']))
{
$error = 'Логин должен иметь только латинские буквы и цифры.';
}
elseif ($db->query("SELECT `id` FROM `users` WHERE `login` = '" . $filter['login'] . "'")->rowCount() != 0)
{
$error = 'Данный логин уже зарегистрирован.';
}
elseif (mb_strlen ($filter['pass1']) < 6)
{
$error = 'Короткий пароль. Минимум 6 символов.';
}
elseif ($filter['pass1'] != $filter['pass2'])
{
$error = 'Пароли не совпадают.';
}
elseif ($_SESSION['captcha'] != $filter['captcha'])
{
$error = 'Проверочный код введен неверно.';
}
else
{
$token = md5(mt_rand(10000, 99999));
$stmt = $db->prepare('INSERT INTO `users` (`login`, `password`, `token`, `time_reg`, `time_last`, `sex`, `language`) VALUES (:login, :password, :token, :time_reg, :time_last, :sex, :language)');
$stmt->execute([
':login' => $filter['login'],
':password' => Filter::encode($filter['pass1']),
':token' => $token,
':time_reg' => time(),
':time_last' => time(),
':sex' => $filter['sex'],
':language' => $config['language'],
]);
setcookie('token', $token, time() + 60 * 60 * 24 * 31 * 365, '/');
setcookie('id', $db->lastInsertId(), time() + 60 * 60 * 24 * 31 * 365, '/');
Core::go('/');
}
}
Core::show('error');
$_SESSION['captcha'] = rand(10000, 99999);
$elements[] = [
'type' => 'input',
'title' => Lang::word('Логин'),
'br' => 1,
'info' => [
'name' => 'login',
]
];
$elements[]= [
'type' => 'select',
'title' => Lang::word('Пол'),
'br' => 1,
'info' => [
'name' => 'sex',
'options' => [
[
1,
Lang::word('Мужской'),
],
[ 0,
Lang::word('Женский'),
]
]
]
];
$elements[] = [
'type' => 'password',
'title' => Lang::word('Пароль'),
'br' => 1,
'info' => [
'name' => 'pass1',
]
];
$elements[] = [
'type' => 'password',
'title' => Lang::word('Повторите пароль'),
'br' => 1,
'info' => [
'name' => 'pass2',
]
];
$elements[] = [
'type' => 'input',
'title' => Lang::word('Проверочный код').': <b>' . $_SESSION['captcha'] . '</b>',
'br' => 1,
'info' => [
'name' => 'captcha'
]
];
$elements[] = [
'type' => 'submit',
'info' => [
'name' => 'submit',
'value' => Lang::word('Далее')
]
];
$smarty->assign([
'method' => 'POST',
'action' => '?',
'el' => $elements
]);
$smarty->display('form.tpl');
$smarty->footer();