Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.71 KB | None | 0 0
  1. <?php
  2.  
  3. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
  4.  
  5. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
  6. //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
  7.  
  8. if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} } //заносим введенный пользователем защитный код в переменную $code, если он пустой, то уничтожаем переменную
  9.  
  10. if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  11.  
  12. if (isset($_POST['firstname']))
  13. {
  14.     $firstname = $_POST['firstname'];  
  15.     $char = mb_strtoupper(substr($string,0,2), "utf-8");
  16.     $firstname[0] = $char[0];
  17.     $firstname[1] = $char[1];  
  18.     if ($firstname == '')
  19.     {
  20.         unset($firstname);
  21.     }
  22. } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  23.  
  24. if (isset($_POST['lastname']))
  25. {
  26.     $lastname = $_POST['firstname'];  
  27.     $char = mb_strtoupper(substr($string,0,2), "utf-8");
  28.     $lastname[0] = $char[0];
  29.     $lastname[1] = $char[1];  
  30.     if ($lastname == '')
  31.     {
  32.         unset($lastname);
  33.     }
  34. } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  35.  
  36. if (isset($_POST['social_networks'])) { $social_networks = $_POST['social_networks']; if ($social_networks == '') { unset($social_networks);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  37.  
  38. if (isset($_POST['date_of_birth'])) { $date_of_birth = $_POST['date_of_birth']; if ($date_of_birth == '') { unset($date_of_birth);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  39.  
  40. if (isset($_POST['phone'])) { $phone = $_POST['phone']; if ($phone == '') { unset($phone);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  41.  
  42. if (isset($_POST['school'])) { $school = $_POST['school']; if ($school == '') { unset($school);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  43.  
  44. if (isset($_POST['school_form'])) { $school_form = $_POST['school_form']; if ($school_form == '') { unset($school_form);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  45.  
  46. if (isset($_POST['about_me'])) { $about_me = $_POST['about_me']; if ($about_me == '') { unset($about_me);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
  47.  
  48. $rpassword = $_POST['rpassword'];
  49.  
  50. if($password != $rpassword)
  51. {
  52.     exit ("Паролі не співпадають!");
  53. }
  54.  
  55.  
  56. if (empty($login) or empty($password)or empty($code) or empty($email) or empty($firstname) or empty($lastname) or empty($date_of_birth) or empty($phone) or empty($school) or empty($social_networks))
  57. {
  58. exit ("Ви ввели не всю інформацію, поверніться назад і заповніть всі поля!"); //останавливаем выполнение сценариев
  59.  
  60. }
  61. if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) //проверка е-mail адреса регулярными выражениями на корректность
  62. {exit ("Некоректно введено е-mail!");}
  63.  
  64.  
  65. function generate_code() //запускаем функцию, генерирующую код
  66. {
  67.                
  68.     $hours = date("H"); // час      
  69.     $minuts = substr(date("H"), 0 , 1);// минута
  70.     $mouns = date("m");    // месяц            
  71.     $year_day = date("z"); // день в году
  72.  
  73.     $str = $hours . $minuts . $mouns . $year_day; //создаем строку
  74.     $str = md5(md5($str)); //дважды шифруем в md5
  75.     $str = strrev($str);// реверс строки
  76.     $str = substr($str, 3, 6); // извлекаем 6 символов, начиная с 3
  77.     // Вам конечно же можно постваить другие значения, так как, если взломщики узнают, каким именно способом это все генерируется, то в защите не будет смысла.
  78.    
  79.  
  80.     $array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
  81.     srand ((float)microtime()*1000000);
  82.     shuffle ($array_mix);
  83.     //Тщательно перемешиваем, соль, сахар по вкусу!!!
  84.     return implode("", $array_mix);
  85. }
  86.  
  87. function chec_code($code) //проверяем код
  88. {
  89.     $code = trim($code);//удаляем пробелы
  90.  
  91.     $array_mix = preg_split ('//', generate_code(), -1, PREG_SPLIT_NO_EMPTY);
  92.     $m_code = preg_split ('//', $code, -1, PREG_SPLIT_NO_EMPTY);
  93.  
  94.     $result = array_intersect ($array_mix, $m_code);
  95. if (strlen(generate_code())!=strlen($code))
  96. {
  97.     return FALSE;
  98. }
  99. if (sizeof($result) == sizeof($array_mix))
  100. {
  101.     return TRUE;
  102. }
  103. else
  104. {
  105.     return FALSE;
  106. }
  107. }
  108.  
  109. // после сравнения проверяем, пускать ли пользователя дальше или, он сделал ошибку, и остановить скрипт
  110. if (!chec_code($_POST['code']))
  111. {
  112. exit ("Ви ввели непрвильно код з картинки."); //останавливаем выполнение сценариев
  113. }
  114.  
  115.  
  116. //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
  117. $login = stripslashes($login);
  118. $login = htmlspecialchars($login);
  119.  
  120. $password = stripslashes($password);
  121. $password = htmlspecialchars($password);
  122.  
  123. $login = trim($login);
  124. $password = trim($password);
  125.  
  126.  
  127. // дописываем новое********************************************
  128.  
  129. //добавляем проверку на длину логина и пароля
  130. if (strlen($login) < 4 or strlen($login) > 15) {
  131.  
  132. exit ("Логін повинен бути не менше чим 4 символи і не більше чим 15."); //останавливаем выполнение сценариев
  133.  
  134. }
  135. if (strlen($password) < 4 or strlen($password) > 15) {
  136.  
  137. exit ("Пароль повинен бути не менше чим з 4 символів і не більше 15."); //останавливаем выполнение сценариев
  138.  
  139. }
  140.  
  141. if (empty($_FILES['fupload']['name']))
  142. {
  143. //если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
  144. $avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
  145. }
  146.  
  147. else
  148. {
  149. //иначе - загружаем изображение пользователя
  150. $path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия
  151.  
  152.    
  153. if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
  154.      { 
  155.            
  156.         $filename = $_FILES['fupload']['name'];
  157.         $source = $_FILES['fupload']['tmp_name'];  
  158.         $target = $path_to_90_directory . $filename;
  159.         move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory
  160.  
  161.     if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
  162.     $im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
  163.     }
  164.     if(preg_match('/[.](PNG)|(png)$/', $filename)) {
  165.     $im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
  166.     }
  167.    
  168.     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
  169.         $im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
  170.     }
  171.    
  172. //СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru
  173.  
  174. // Создание квадрата 90x90
  175. // dest - результирующее изображение
  176. // w - ширина изображения
  177. // ratio - коэффициент пропорциональности
  178.  
  179. $w = 90;  // квадратная 90x90. Можно поставить и другой размер.
  180.  
  181. // создаём исходное изображение на основе
  182. // исходного файла и определяем его размеры
  183. $w_src = imagesx($im); //вычисляем ширину
  184. $h_src = imagesy($im); //вычисляем высоту изображения
  185.  
  186.          // создаём пустую квадратную картинку
  187.          // важно именно truecolor!, иначе будем иметь 8-битный результат
  188.          $dest = imagecreatetruecolor($w,$w);
  189.  
  190.          // вырезаем квадратную серединку по x, если фото горизонтальное
  191.          if ($w_src>$h_src)
  192.          imagecopyresampled($dest, $im, 0, 0,
  193.                           round((max($w_src,$h_src)-min($w_src,$h_src))/2),
  194.                           0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
  195.  
  196.          // вырезаем квадратную верхушку по y,
  197.          // если фото вертикальное (хотя можно тоже серединку)
  198.          if ($w_src<$h_src)
  199.          imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
  200.                           min($w_src,$h_src), min($w_src,$h_src));
  201.  
  202.          // квадратная картинка масштабируется без вырезок
  203.          if ($w_src==$h_src)
  204.          imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
  205.          
  206.  
  207. $date=time(); //вычисляем время в настоящий момент.
  208. imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
  209.  
  210. //почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
  211.  
  212. $avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
  213.  
  214. $delfull = $path_to_90_directory.$filename;
  215. unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
  216. }
  217. else
  218.          {
  219.          //в случае несоответствия формата, выдаем соответствующее сообщение
  220.          
  221. exit ("Аватар повинен бути в форматі <strong>JPG,GIF або PNG</strong>"); //останавливаем выполнение сценариев
  222.  
  223.          }
  224. //конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
  225. }
  226.  
  227.  
  228.  
  229.  
  230. //можно добавить несколько своих символов по вкусу, например, вписав "b3p6f". Если этот пароль будут взламывать метадом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет. Но советую ставить другие символы, можно в начале строки или в середине.
  231.  
  232. //При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.
  233.  
  234.  
  235. // дописали новое********************************************
  236.  
  237. // Далее идет все из первой части статьи,но необходимо дописать изменение в запрос к базе.
  238.  
  239. // подключаемся к базе
  240. include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
  241.  
  242. // проверка на существование пользователя с таким же логином
  243. $result = mysqli_query($db, "SELECT id FROM users WHERE login='$login'");
  244. $myrow = mysqli_fetch_array($result);
  245. if (!empty($myrow['id'])) {
  246.  
  247. exit ("Вибачте, але введннй Вами логін вже зареєстрований. Введіть інший логін."); //останавливаем выполнение сценариев
  248.  
  249. }
  250.  
  251. // если такого нет, то сохраняем данные
  252. $result2 = mysqli_query ($db, "INSERT INTO users (login,password,avatar,email,date,firstname,lastname,date_of_birth,phone,school,school_form,social_networks,about_me) VALUES('$login','$password','$avatar','$email',NOW(),'$firstname','$lastname','$date_of_birth','$phone','$school','$school_form','$social_networks','$about_me')");
  253. // Проверяем, есть ли ошибки
  254. if ($result2)
  255. {
  256.  
  257. $result3 = mysqli_query ($db, "SELECT id FROM users WHERE login='$login'");//извлекаем идентификатор пользователя. Благодаря ему у нас и будет уникальный код активации, ведь двух одинаковых идентификаторов быть не может.
  258. $myrow3 = mysqli_fetch_array($result3);
  259. $activation = md5($myrow3['id']).md5($login);//код активации аккаунта. Зашифруем через функцию md5 идентификатор и логин. Такое сочетание пользователь вряд ли сможет подобрать вручную через адресную строку.
  260.  
  261. $subject = "Підтвердження реєстрації";//тема сообщения
  262. $message = "Вітаю! Спасибі за реєстрацію на Нашому сайті\nВаш логін: ".$login."\n
  263. Перейдіть по ссилці, щоб активувати Ваш акаунт:\n http://kosht/acc/activation.php?login=".$login."&code=".$activation."\nЗ повагою,\n
  264. Адміністрація Клубу Обдарованих Школярів Тернополя
  265. ";//содержание сообщение
  266. mail($email, $subject, $message, "Content-type:text/plain; Charset=UTF-8\r\n");//отправляем сообщение
  267.    
  268. echo "Вам на E-mail надісланий лист з cсилкою, для підтверждення реєстрації. УВАГА! Ссилка дійсна 1 год. <a href='index.php'>Головна сторінка</a>"; //говорим о отправленном письме пользователю
  269. }
  270.  
  271. else {
  272. exit ("Помилка! Ви не зареєстровані."); //останавливаем выполнение сценариев
  273.  
  274.      }
  275. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement