Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- //$pm = preg_match("/[[:alnum:]]/", $_POST['login']);
- //echo $pm;
- //$em = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
- //if ($em == false)
- // echo 'e-mail FALSE';
- //else
- // echo $em;
- // в pattern регулярные выражения на поиск исключающих и прямых соответствий
- // + - в рег. выраж. означает от 0 и более вхождений
- //// (например "[xyz]+" соответствует от 1го и более вхождений из
- //// символов x, y, z >>> "x", "y", "zx", "zyxxx")
- // внутренние опции >>>
- // /i - независимость регистр c
- //// /u - обработка в utf-8 для расспознавания русс. букв и
- //// применения регистра
- // ОСТОРОЖНО!!! - при /u - РАСШИРЯЕТ экран. послед. и системные имена символьных классов включающие ТОЛЬКО АНГЛ. БУКВЫ до набора букв кодировки utf-8
- // ОТСТОРОЖНО!!! - при наборе идентичных с виду букв к примеру - на англ. "A" и на русс. "А" - они РАЗНЫЕ при перечислении символов в символьном классе [...]
- // /m - поочередная обработка строк при наличии перевода строки (\n) в обрабатываемом тексте и метасимволов в рег. выраж. (^ - нач. строки, $ - конец строки)
- // если ставим /^$/ то привязываемся к точному шаблону строки
- //// например "/[^\w абвгдеёжзийклмнопрстуфхцчшщъыьэюяії.-]+/uim"
- //// образует множество строк наподобии >>>
- //// "®°©", "®°©©©©" и т.д.
- //// но строка "П®" не будет соответствовать, так как допустимый шаблон - любое кол-во всех символов, кроме путой строки, англ. / русс. букв, цифр, точек и тире
- // без ^$ ищет на соответствие в любом месте строки
- if (!$_POST['login'])
- $inp_empty[] = 'Введите логин';
- if (!$_POST['pass'])
- $inp_empty[] = 'Ввведите пароль';
- if (!$_POST['email'])
- $inp_empty[] = 'Ввведите e-mail';
- if($inp_empty)
- {
- echo
- '<div id="reg2" align="center">'.
- "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
- foreach ($inp_empty as $v)
- {
- echo "\n\t\t\t\t".$v.'<br>';
- }
- echo
- "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
- "\n\t\t\t".'</div>'."\n";
- }
- ///////////////////
- elseif (!$inp_empty)
- {
- // нахождение в любом месте логина других символов (0 - верно, 1 - нет)
- $val_log_aliens = preg_match("/[^][}{)(a-z0-9 абвгдеёжзийклмнопрстуфхцчшщъыьэюяіїє.-]/ui", $_POST['login']);
- // нахождение кол-ва букв логина (3 и более - верно, 0-2 - нет)
- $val_log_3more_letters = preg_match_all("/[a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюяіїє]/ui", $_POST['login']);
- // нахождение в любом месте пароля символов отличных от a-zA-Z0-9 (0 - верно, 1 - нет)
- $val_pass_aliens = preg_match("/[^[:alnum:]]/", $_POST['pass']);
- // длина пароля (6 и болле - верно, меньше 6 - нет)
- $val_pass_len = strlen($_POST['pass']);
- // вернет строку вводимого e-mail или false (верно - if($x))
- $val_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
- //////////
- if ($val_log_aliens > 0)
- $errors[] = 'В логине недопустимые символы (вводите только англ./русс./укр. буквы и цифры)';
- if ($val_log_3more_letters < 3)
- $errors[] = 'В логине меньше 3-ех букв';
- if ($val_pass_aliens > 0)
- $errors[] = 'В пароле недопустимые символы';
- if ($val_pass_len < 6)
- $errors[] = 'Пароль меньше 6-ти знаков';
- if (!$val_email)
- $errors[] = 'Ошибочный e-mail (используйте только англ. буквы, цифры, @ и домен ящика)';
- //////////
- if ($errors)
- {
- echo
- '<div id="reg2" align="center">'.
- "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
- foreach ($errors as $v)
- {
- echo "\n\t\t\t\t".$v.'<br>';
- }
- echo
- "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
- "\n\t\t\t".'</div>'."\n";
- }
- if (!$errors)
- {
- ////////// Финальная обработка введенных данных и сверка совпадений
- $login = trim(strip_tags($_POST['login']));
- // если в логине больше двух пробелов между словами(символами), то они везде заменились на один пробел
- $login = preg_replace("/[\h]{2,}/", " ", $login);
- $email = $_POST['email'];
- ////--- хэшируем пароль
- require 'func_rand_str.php';
- // соль SHA-512
- $salt_gen = RandomString(16);
- $salt = '$6$rounds=5000$'.$salt_gen.'$';
- // хэш, в дальнейшем сверяем с БД через substr($str,0,32) вычленяя соль для сверки вводимого пароля
- $pass = crypt($_POST['pass'], $salt);
- //////////
- ////////// проверка на существующий логин / email и активацию
- $sql = "SELECT login, email, activation FROM users WHERE login = '$login'";
- $stmt = $con->prepare($sql); // PDOStatement
- $stmt->execute();
- $res = $stmt->fetch(PDO::FETCH_ASSOC);
- if ($res['login'] and $res['activation'])
- $matches[] = 'Такой пользователь уже существует';
- elseif ($res['login'] and !$res['activation'])
- $matches[] = 'Такой пользователь уже существует, но необходима активация, которая была отправлена ему на e-mail';
- $sql = "SELECT login, email, activation FROM users WHERE email = '$email'";
- $stmt = $con->prepare($sql); // PDOStatement
- $stmt->execute();
- $res = $stmt->fetch(PDO::FETCH_ASSOC);
- if ($res['email'] and $res['activation'])
- $matches[] = 'Такой e-mail уже существует';
- elseif ($res['email'] and !$res['activation'])
- $matches[] = 'Такой e-mail уже существует, но этому пользователю необходима активация, которая была отправлена на этот e-mail';
- //////////
- }
- if (!$errors and $matches)
- {
- echo
- '<div id="reg2" align="center">'.
- "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
- foreach ($matches as $v)
- {
- echo "\n\t\t\t\t".$v.'<br>';
- }
- echo
- "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
- "\n\t\t\t".'</div>'."\n";
- }
- if (!$errors and !$matches)
- {
- // вносим финальные данные в БД
- $sql = "INSERT INTO users (login, pass, email) VALUES ('$login', '$pass', '$email')";
- $stmt = $con->prepare($sql); // PDOStatement
- $stmt->execute();
- echo
- '<div id="cont_reg2_0" align="center">'.
- "\n\t\t\t\t".
- '<p>Ваш аккаунт успешно создался.<br>'.
- "\n\t\t\t\t".
- 'Активируйтесь через ссылку в письме, высланное на <b>'.$email.'</b>'.
- "\n\t\t\t\t".'</p>'.
- "\n\t\t\t".'</div>'."\n";
- /*
- "\n\t\t\t".'<div id="cont_reg2" style="margin-top:5px; float:right; position:relative; right:50%;">'.
- "\n\t\t\t\t".'<div id="reg2" style="position:relative; left:50%;">'.
- "\n\t\t\t\t\t".'<div style="float:left; width:70px">e-mail:</div>'.
- "\n\t\t\t\t\t".'<div style="float:left;">'.$email.'</div>'.
- "\n\t\t\t\t\t".'<div class="clear"></div>'.
- "\n\t\t\t\t".'</div>'.
- "\n\t\t\t".'</div>'."\n"
- */
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement