Advertisement
Redee

scetch > reg2.php (beta v.0.02) - проверка данных

Jun 11th, 2013
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.22 KB | None | 0 0
  1. <?
  2. //$pm = preg_match("/[[:alnum:]]/", $_POST['login']);
  3. //echo $pm;
  4.  
  5. //$em = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
  6. //if ($em == false)
  7. //  echo 'e-mail FALSE';
  8. //else
  9. //  echo $em;
  10.  
  11. // в pattern регулярные выражения на поиск исключающих и прямых соответствий
  12. // + - в рег. выраж. означает от 0 и более вхождений
  13. //// (например "[xyz]+" соответствует от 1го и более вхождений из
  14. //// символов x, y, z >>> "x", "y", "zx", "zyxxx")
  15. // внутренние опции >>>
  16. // /i - независимость регистр c
  17. //// /u - обработка в utf-8 для расспознавания русс. букв и
  18. //// применения регистра
  19. // ОСТОРОЖНО!!! - при /u - РАСШИРЯЕТ экран. послед. и системные имена символьных классов включающие ТОЛЬКО АНГЛ. БУКВЫ до набора букв кодировки utf-8
  20. // ОТСТОРОЖНО!!! - при наборе идентичных с виду букв к примеру - на англ. "A" и на русс. "А" - они РАЗНЫЕ при перечислении символов в символьном классе [...]
  21. // /m - поочередная обработка строк при наличии перевода строки (\n) в обрабатываемом тексте и метасимволов в рег. выраж. (^ - нач. строки, $ - конец строки)
  22. // если ставим /^$/ то привязываемся к точному шаблону строки
  23. //// например "/[^\w абвгдеёжзийклмнопрстуфхцчшщъыьэюяії.-]+/uim"
  24. //// образует множество строк наподобии >>>
  25. //// "®°©", "®°©©©©" и т.д.
  26. //// но строка "П®" не будет соответствовать, так как допустимый шаблон - любое кол-во всех символов, кроме путой строки, англ. / русс. букв, цифр, точек и тире
  27. // без ^$ ищет на соответствие в любом месте строки
  28.  
  29. if (!$_POST['login'])
  30.     $inp_empty[] = 'Введите логин';
  31. if (!$_POST['pass'])
  32.     $inp_empty[] = 'Ввведите пароль';
  33. if (!$_POST['email'])
  34.     $inp_empty[] = 'Ввведите e-mail';
  35.  
  36. if($inp_empty)
  37. {
  38.     echo
  39.     '<div id="reg2" align="center">'.
  40.         "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
  41.     foreach ($inp_empty as $v)
  42.     {
  43.         echo "\n\t\t\t\t".$v.'<br>';
  44.     }
  45.     echo
  46.         "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
  47.     "\n\t\t\t".'</div>'."\n";
  48. }
  49.  
  50. ///////////////////
  51.  
  52. elseif (!$inp_empty)
  53. {
  54.     // нахождение в любом месте логина других символов (0 - верно, 1 - нет)
  55.     $val_log_aliens = preg_match("/[^][}{)(a-z0-9 абвгдеёжзийклмнопрстуфхцчшщъыьэюяіїє.-]/ui", $_POST['login']);
  56.    
  57.     // нахождение кол-ва букв логина (3 и более - верно, 0-2 - нет) 
  58.     $val_log_3more_letters = preg_match_all("/[a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюяіїє]/ui", $_POST['login']);
  59.    
  60.     // нахождение в любом месте пароля символов отличных от a-zA-Z0-9 (0 - верно, 1 - нет)
  61.     $val_pass_aliens = preg_match("/[^[:alnum:]]/", $_POST['pass']);
  62.    
  63.     // длина пароля (6 и болле - верно, меньше 6 - нет)
  64.     $val_pass_len = strlen($_POST['pass']);
  65.    
  66.     // вернет строку вводимого e-mail или false (верно - if($x))
  67.     $val_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
  68.  
  69.     //////////
  70.     if ($val_log_aliens > 0)
  71.         $errors[] = 'В логине недопустимые символы (вводите только англ./русс./укр. буквы и цифры)';
  72.  
  73.     if ($val_log_3more_letters < 3)
  74.         $errors[] = 'В логине меньше 3-ех букв';
  75.  
  76.     if ($val_pass_aliens > 0)
  77.         $errors[] = 'В пароле недопустимые символы';
  78.  
  79.     if ($val_pass_len < 6)
  80.         $errors[] = 'Пароль меньше 6-ти знаков';
  81.  
  82.     if (!$val_email)
  83.         $errors[] = 'Ошибочный e-mail (используйте только англ. буквы, цифры, @ и домен ящика)';
  84.     //////////
  85.  
  86.     if ($errors)
  87.     {
  88.         echo
  89.         '<div id="reg2" align="center">'.
  90.             "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
  91.         foreach ($errors as $v)
  92.         {
  93.             echo "\n\t\t\t\t".$v.'<br>';
  94.         }
  95.         echo
  96.             "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
  97.         "\n\t\t\t".'</div>'."\n";
  98.     }
  99.  
  100.     if (!$errors)
  101.     {
  102.         ////////// Финальная обработка введенных данных и сверка совпадений
  103.         $login = trim(strip_tags($_POST['login']));
  104.         // если в логине больше двух пробелов между словами(символами), то они везде заменились на один пробел
  105.         $login = preg_replace("/[\h]{2,}/", " ", $login);
  106.         $email = $_POST['email'];
  107.  
  108.         ////--- хэшируем пароль
  109.         require 'func_rand_str.php';
  110.         // соль SHA-512
  111.         $salt_gen = RandomString(16);
  112.         $salt = '$6$rounds=5000$'.$salt_gen.'$';
  113.         // хэш, в дальнейшем сверяем с БД через substr($str,0,32) вычленяя соль для сверки вводимого пароля
  114.         $pass = crypt($_POST['pass'], $salt);
  115.         //////////
  116.  
  117.         ////////// проверка на существующий логин / email и активацию
  118.         $sql = "SELECT login, email, activation FROM users WHERE login = '$login'";
  119.         $stmt = $con->prepare($sql); // PDOStatement
  120.         $stmt->execute();
  121.         $res = $stmt->fetch(PDO::FETCH_ASSOC);
  122.         if ($res['login'] and $res['activation'])
  123.             $matches[] = 'Такой пользователь уже существует';
  124.         elseif ($res['login'] and !$res['activation'])
  125.             $matches[] = 'Такой пользователь уже существует, но необходима активация, которая была отправлена ему на e-mail';
  126.  
  127.         $sql = "SELECT login, email, activation FROM users WHERE email = '$email'";
  128.         $stmt = $con->prepare($sql); // PDOStatement
  129.         $stmt->execute();
  130.         $res = $stmt->fetch(PDO::FETCH_ASSOC);
  131.         if ($res['email'] and $res['activation'])
  132.             $matches[] = 'Такой e-mail уже существует';
  133.         elseif ($res['email'] and !$res['activation'])
  134.             $matches[] = 'Такой e-mail уже существует, но этому пользователю необходима активация, которая была отправлена на этот e-mail';
  135.         //////////
  136.     }
  137.  
  138.     if (!$errors and $matches)
  139.     {
  140.         echo
  141.         '<div id="reg2" align="center">'.
  142.             "\n\t\t\t\t".'Заполните верно все поля!'.'<br>';
  143.         foreach ($matches as $v)
  144.         {
  145.             echo "\n\t\t\t\t".$v.'<br>';
  146.         }
  147.         echo
  148.             "\n\t\t\t\t".'<a href="/reg">Вернуться назад</a>'.
  149.         "\n\t\t\t".'</div>'."\n";
  150.     }
  151.  
  152.     if (!$errors and !$matches)
  153.     {
  154.         // вносим финальные данные в БД
  155.         $sql = "INSERT INTO users (login, pass, email) VALUES ('$login', '$pass', '$email')";
  156.         $stmt = $con->prepare($sql); // PDOStatement
  157.         $stmt->execute();
  158.  
  159.         echo
  160.         '<div id="cont_reg2_0" align="center">'.
  161.             "\n\t\t\t\t".
  162.             '<p>Ваш аккаунт успешно создался.<br>'.
  163.  
  164.             "\n\t\t\t\t".
  165.             'Активируйтесь через ссылку в письме, высланное на <b>'.$email.'</b>'.
  166.             "\n\t\t\t\t".'</p>'.
  167.         "\n\t\t\t".'</div>'."\n";
  168.        
  169.         /*
  170.         "\n\t\t\t".'<div id="cont_reg2" style="margin-top:5px; float:right; position:relative; right:50%;">'.
  171.            
  172.             "\n\t\t\t\t".'<div id="reg2" style="position:relative; left:50%;">'.
  173.            
  174.                 "\n\t\t\t\t\t".'<div style="float:left; width:70px">e-mail:</div>'.
  175.                 "\n\t\t\t\t\t".'<div style="float:left;">'.$email.'</div>'.
  176.                 "\n\t\t\t\t\t".'<div class="clear"></div>'.
  177.  
  178.             "\n\t\t\t\t".'</div>'.
  179.  
  180.         "\n\t\t\t".'</div>'."\n"
  181.         */
  182.     }
  183. }
  184. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement