Advertisement
Guest User

Untitled

a guest
Dec 27th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.22 KB | None | 0 0
  1. <?php
  2.  
  3. session_start();
  4.  
  5. require('.config/connection.php');
  6.  
  7. function generateCode($length=6) {
  8.  
  9. $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
  10. $code = "";
  11.  
  12. $clen = strlen($chars) - 1;
  13. while (strlen($code) < $length) {
  14. $code .= $chars[mt_rand(0,$clen)];
  15. }
  16.  
  17. return $code;
  18. }
  19.  
  20. $reg_captcha_err = false;
  21. $reg_email_err = false;
  22. $reg_alreadyreg_err = false;
  23. $log_pass_err = false;
  24. $log_email_err = false;
  25. $log_captcha_err = false;
  26. $comment_captcha_err = false;
  27.  
  28. class User
  29. {
  30.  
  31. private $_db = null;
  32. private $_userId = null;
  33. private $_isLogged = null;
  34.  
  35. public function __construct() {
  36. $this->_db = new PDO('mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
  37. $query = $this->_db->prepare('SET NAMES utf8');
  38. $query->execute();
  39. $this->_isLogged = $this->checkLogged();
  40. }
  41.  
  42. // авторизация
  43. public function auth($type) {
  44. $set_hash = $this->_db->prepare('UPDATE users SET user_hash=? WHERE user_id=?');
  45. $hash = md5(generateCode(12));
  46. $_SESSION['user_id'] = $this->_userId;
  47. // если стоит галочка на 'запомнить меня'
  48. if($type == 'on') {
  49. setcookie("user_id", $this->_userId, time()+3600*24*7);
  50. setcookie("user_hash", $hash, time()+3600*24*7);
  51. $set_hash->execute(array($hash, $this->_userId));
  52. }
  53. }
  54.  
  55. // выход
  56. public function logout() {
  57. // удаление сессии
  58. unset($_SESSION['user_id']);
  59. // удаление cookies
  60. setcookie("user_id", '', time());
  61. setcookie("user_hash", '', time());
  62. // разрушение сессии
  63. session_destroy();
  64. }
  65.  
  66. // проверка на то что человек вошел
  67. public function checkLogged() {
  68. $check = $this->_db->prepare('SELECT COUNT(user_id) FROM users WHERE user_hash=? AND user_id=?');
  69. if(isset($_SESSION['user_id'])) {
  70. $this->_userId = $_SESSION['user_id'];
  71. return true;
  72. } else {
  73. if(isset($_COOKIE['user_id']) and isset($_COOKIE['user_hash'])) {
  74. $check->execute(array($_COOKIE['user_hash'], $_COOKIE['user_id']));
  75. $data = $check->fetch();
  76. if($data[0]==1) {
  77. $this->_userId = $_COOKIE['user_id'];
  78. $this->auth('off');
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. } else {
  84. return false;
  85. }
  86. }
  87. }
  88.  
  89. // регистрация
  90. public function register($email, $pass, $name) {
  91. $check_email = $this->_db->prepare('SELECT COUNT(user_id) FROM users WHERE user_email=?');
  92. $register_query = $this->_db->prepare("INSERT INTO users (user_email, user_pass, user_name) VALUES (?,?,?)");
  93. // проверка валидности email
  94. if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
  95. $check_email->execute(array($email));
  96. $result = $check_email->fetch();
  97. // если нет пользователя с таким email
  98. if($result[0] == 0) {
  99. $pass = md5(md5($pass));
  100. $register_query->execute(array($email, $pass, $name));
  101. $this->_userId = $this->_db->lastInsertId();
  102. // авторизуем
  103. $this->auth('on');
  104. header("location: /");
  105. // уже зарегистрирован
  106. } else {
  107. global $reg_alreadyreg_err;
  108. $reg_alreadyreg_err = true;
  109. }
  110. // почта невалидна
  111. } else {
  112. global $reg_email_err;
  113. $reg_email_err = true;
  114. }
  115. }
  116.  
  117. // авторизация. type='on' - запомнить по кукам
  118. public function login($email, $pass, $type) {
  119. $check = $this->_db->prepare('SELECT COUNT(user_id), user_id FROM users WHERE user_email=? AND user_pass=?');
  120. // проверка валидности email
  121. if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
  122. $check->execute(array($email, md5(md5($pass))));
  123. $result = $check->fetch();
  124. // если пароль правильный
  125. if($result[0] == 1) {
  126. $this->_userId = $result['user_id'];
  127. // авторизуем
  128. $this->auth($type);
  129. header("location: /");
  130. // уже неправильный пароль
  131. } else {
  132. global $log_pass_err;
  133. $log_pass_err = true;
  134. }
  135. // почта невалидна
  136. } else {
  137. global $log_email_err;
  138. $log_email_err = true;
  139. }
  140. }
  141.  
  142. public function isLogged() {
  143. return $this->_isLogged;
  144. }
  145.  
  146. public function getUserData() {
  147. $query = $this->_db->prepare("SELECT * FROM users WHERE user_id=?");
  148. $query->execute(array($this->_userId));
  149. return $query->fetch();
  150. }
  151.  
  152. public function getUserId() {
  153. return $this->_userId;
  154. }
  155.  
  156. public function addComment($item_id,$text) {
  157. if($this->isLogged()) {
  158. $query = $this->_db->prepare("INSERT comments SET user_id=".$this->_userId.", product_id=".$item_id.", message='".$text."'");
  159. $query->execute();
  160. } else {
  161. $query = $this->_db->prepare("INSERT comments SET user_id=4, product_id=".$item_id.", message='".$text."'");
  162. $query->execute();
  163. }
  164. }
  165.  
  166.  
  167. // обновление названия аватарки в бд у пользователя
  168. public function changeAvatar($img) {
  169. $query = $this->_db->prepare("UPDATE users SET user_image='".$img."' WHERE user_id=".$this->getUserId());
  170. $query->execute();
  171. }
  172.  
  173. }
  174.  
  175. $user = new User();
  176. $isLogged = $user->isLogged();
  177. if($isLogged) {
  178. $user_data = $user->getUserData();
  179. }
  180.  
  181. // обработка регистрация
  182. if($_POST['action']=='register') {
  183. if($_POST['captcha']==$_SESSION['captcha']) {
  184. $email = htmlspecialchars($_POST['user_email']);
  185. $name = htmlspecialchars($_POST['user_name']);
  186. $user->register($email, $_POST['user_pass'], $name);
  187. } else {
  188. $reg_captcha_err = true;
  189. }
  190. }
  191.  
  192.  
  193. // обработчик входа
  194. if($_POST['action']=='login') {
  195. if($_POST['captcha']==$_SESSION['captcha']) {
  196. $email = htmlspecialchars($_POST['user_email']);
  197. $user->login($email, $_POST['user_pass'], $_POST['check']);
  198. } else {
  199. $log_captcha_err = true;
  200. }
  201. }
  202.  
  203. // обработка выхода
  204. if($_GET['action']=='logout') {
  205. $user->logout();
  206. header("location: /");
  207. }
  208.  
  209. // обработка добавления комментария
  210. if($_POST['action'] == 'addComment') {
  211. if (isset($_POST['id']) && isset($_POST['message'])) {
  212. $item_id = htmlspecialchars($_POST['id']);
  213. $message = htmlspecialchars($_POST['message']);
  214.  
  215. if($user->isLogged()) {
  216. $user->addComment($item_id,$message);
  217. } else {
  218. if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) {
  219. $user->addComment($item_id,$message);
  220. } else {
  221. $comment_captcha_err = true;
  222. }
  223. unset($_SESSION["captcha"]);
  224. }
  225. }
  226. }
  227.  
  228.  
  229. if($_POST['action'] == 'changeAvatar') {
  230.  
  231. // Проверяем загружен ли файл
  232. if(is_uploaded_file($_FILES["avatar"]["tmp_name"]))
  233. {
  234. if($_FILES["avatar"]["size"] > 1024*3*1024)
  235. {
  236. echo ("Размер файла превышает три мегабайта");
  237. exit;
  238. }
  239.  
  240. $types_mime = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
  241. $types_ext = array('gif', 'jpeg', 'jpg', 'png');
  242.  
  243. // проверка на тип изображения(mime-type)
  244. $flag_type = false;
  245. foreach ($types_mime as $type) {
  246. if($_FILES["avatar"]["type"] == $type) {
  247. $flag_type = true;
  248. break;
  249. }
  250. }
  251.  
  252. $name = $_FILES["avatar"]["name"];
  253. $ext = end((explode(".", $name)));
  254. // проверка расширения изображения
  255. foreach ($types_ext as $type) {
  256. if($ext == $type) {
  257. $flag_type = true;
  258. break;
  259. } else {
  260. $flag_type = false;
  261. }
  262. }
  263.  
  264. // если тип файла не картинка, то выходим из обработчика
  265. if(!$flag_type) {
  266. header('location:'.$_SERVER['HTTP_REFERER']);
  267. return;
  268. }
  269.  
  270. // Если файл картинки загружен успешно, перемещаем его
  271. // из временной директории в конечную
  272. $dir = "/var/www/mysite.ru/images/users/".$user->getUserId().".".$ext;
  273. move_uploaded_file($_FILES["avatar"]["tmp_name"], $dir);
  274. // записываем в БД
  275. $user->changeAvatar($user->getUserId().".".$ext);
  276. header('location:'.$_SERVER['HTTP_REFERER']);
  277. } else {
  278. echo("Ошибка загрузки файла");
  279. }
  280. }
  281.  
  282.  
  283. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement