Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- session_start();
- require('.config/connection.php');
- function generateCode($length=6) {
- $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
- $code = "";
- $clen = strlen($chars) - 1;
- while (strlen($code) < $length) {
- $code .= $chars[mt_rand(0,$clen)];
- }
- return $code;
- }
- $reg_captcha_err = false;
- $reg_email_err = false;
- $reg_alreadyreg_err = false;
- $log_pass_err = false;
- $log_email_err = false;
- $log_captcha_err = false;
- $comment_captcha_err = false;
- class User
- {
- private $_db = null;
- private $_userId = null;
- private $_isLogged = null;
- public function __construct() {
- $this->_db = new PDO('mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
- $query = $this->_db->prepare('SET NAMES utf8');
- $query->execute();
- $this->_isLogged = $this->checkLogged();
- }
- // авторизация
- public function auth($type) {
- $set_hash = $this->_db->prepare('UPDATE users SET user_hash=? WHERE user_id=?');
- $hash = md5(generateCode(12));
- $_SESSION['user_id'] = $this->_userId;
- // если стоит галочка на 'запомнить меня'
- if($type == 'on') {
- setcookie("user_id", $this->_userId, time()+3600*24*7);
- setcookie("user_hash", $hash, time()+3600*24*7);
- $set_hash->execute(array($hash, $this->_userId));
- }
- }
- // выход
- public function logout() {
- // удаление сессии
- unset($_SESSION['user_id']);
- // удаление cookies
- setcookie("user_id", '', time());
- setcookie("user_hash", '', time());
- // разрушение сессии
- session_destroy();
- }
- // проверка на то что человек вошел
- public function checkLogged() {
- $check = $this->_db->prepare('SELECT COUNT(user_id) FROM users WHERE user_hash=? AND user_id=?');
- if(isset($_SESSION['user_id'])) {
- $this->_userId = $_SESSION['user_id'];
- return true;
- } else {
- if(isset($_COOKIE['user_id']) and isset($_COOKIE['user_hash'])) {
- $check->execute(array($_COOKIE['user_hash'], $_COOKIE['user_id']));
- $data = $check->fetch();
- if($data[0]==1) {
- $this->_userId = $_COOKIE['user_id'];
- $this->auth('off');
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- }
- // регистрация
- public function register($email, $pass, $name) {
- $check_email = $this->_db->prepare('SELECT COUNT(user_id) FROM users WHERE user_email=?');
- $register_query = $this->_db->prepare("INSERT INTO users (user_email, user_pass, user_name) VALUES (?,?,?)");
- // проверка валидности email
- if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
- $check_email->execute(array($email));
- $result = $check_email->fetch();
- // если нет пользователя с таким email
- if($result[0] == 0) {
- $pass = md5(md5($pass));
- $register_query->execute(array($email, $pass, $name));
- $this->_userId = $this->_db->lastInsertId();
- // авторизуем
- $this->auth('on');
- header("location: /");
- // уже зарегистрирован
- } else {
- global $reg_alreadyreg_err;
- $reg_alreadyreg_err = true;
- }
- // почта невалидна
- } else {
- global $reg_email_err;
- $reg_email_err = true;
- }
- }
- // авторизация. type='on' - запомнить по кукам
- public function login($email, $pass, $type) {
- $check = $this->_db->prepare('SELECT COUNT(user_id), user_id FROM users WHERE user_email=? AND user_pass=?');
- // проверка валидности email
- if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
- $check->execute(array($email, md5(md5($pass))));
- $result = $check->fetch();
- // если пароль правильный
- if($result[0] == 1) {
- $this->_userId = $result['user_id'];
- // авторизуем
- $this->auth($type);
- header("location: /");
- // уже неправильный пароль
- } else {
- global $log_pass_err;
- $log_pass_err = true;
- }
- // почта невалидна
- } else {
- global $log_email_err;
- $log_email_err = true;
- }
- }
- public function isLogged() {
- return $this->_isLogged;
- }
- public function getUserData() {
- $query = $this->_db->prepare("SELECT * FROM users WHERE user_id=?");
- $query->execute(array($this->_userId));
- return $query->fetch();
- }
- public function getUserId() {
- return $this->_userId;
- }
- public function addComment($item_id,$text) {
- if($this->isLogged()) {
- $query = $this->_db->prepare("INSERT comments SET user_id=".$this->_userId.", product_id=".$item_id.", message='".$text."'");
- $query->execute();
- } else {
- $query = $this->_db->prepare("INSERT comments SET user_id=4, product_id=".$item_id.", message='".$text."'");
- $query->execute();
- }
- }
- // обновление названия аватарки в бд у пользователя
- public function changeAvatar($img) {
- $query = $this->_db->prepare("UPDATE users SET user_image='".$img."' WHERE user_id=".$this->getUserId());
- $query->execute();
- }
- }
- $user = new User();
- $isLogged = $user->isLogged();
- if($isLogged) {
- $user_data = $user->getUserData();
- }
- // обработка регистрация
- if($_POST['action']=='register') {
- if($_POST['captcha']==$_SESSION['captcha']) {
- $email = htmlspecialchars($_POST['user_email']);
- $name = htmlspecialchars($_POST['user_name']);
- $user->register($email, $_POST['user_pass'], $name);
- } else {
- $reg_captcha_err = true;
- }
- }
- // обработчик входа
- if($_POST['action']=='login') {
- if($_POST['captcha']==$_SESSION['captcha']) {
- $email = htmlspecialchars($_POST['user_email']);
- $user->login($email, $_POST['user_pass'], $_POST['check']);
- } else {
- $log_captcha_err = true;
- }
- }
- // обработка выхода
- if($_GET['action']=='logout') {
- $user->logout();
- header("location: /");
- }
- // обработка добавления комментария
- if($_POST['action'] == 'addComment') {
- if (isset($_POST['id']) && isset($_POST['message'])) {
- $item_id = htmlspecialchars($_POST['id']);
- $message = htmlspecialchars($_POST['message']);
- if($user->isLogged()) {
- $user->addComment($item_id,$message);
- } else {
- if (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) {
- $user->addComment($item_id,$message);
- } else {
- $comment_captcha_err = true;
- }
- unset($_SESSION["captcha"]);
- }
- }
- }
- if($_POST['action'] == 'changeAvatar') {
- // Проверяем загружен ли файл
- if(is_uploaded_file($_FILES["avatar"]["tmp_name"]))
- {
- if($_FILES["avatar"]["size"] > 1024*3*1024)
- {
- echo ("Размер файла превышает три мегабайта");
- exit;
- }
- $types_mime = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
- $types_ext = array('gif', 'jpeg', 'jpg', 'png');
- // проверка на тип изображения(mime-type)
- $flag_type = false;
- foreach ($types_mime as $type) {
- if($_FILES["avatar"]["type"] == $type) {
- $flag_type = true;
- break;
- }
- }
- $name = $_FILES["avatar"]["name"];
- $ext = end((explode(".", $name)));
- // проверка расширения изображения
- foreach ($types_ext as $type) {
- if($ext == $type) {
- $flag_type = true;
- break;
- } else {
- $flag_type = false;
- }
- }
- // если тип файла не картинка, то выходим из обработчика
- if(!$flag_type) {
- header('location:'.$_SERVER['HTTP_REFERER']);
- return;
- }
- // Если файл картинки загружен успешно, перемещаем его
- // из временной директории в конечную
- $dir = "/var/www/mysite.ru/images/users/".$user->getUserId().".".$ext;
- move_uploaded_file($_FILES["avatar"]["tmp_name"], $dir);
- // записываем в БД
- $user->changeAvatar($user->getUserId().".".$ext);
- header('location:'.$_SERVER['HTTP_REFERER']);
- } else {
- echo("Ошибка загрузки файла");
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement