c1
This commit is contained in:
157
www/first.loc/api/authentication-jwt/Objects/User.php
Normal file
157
www/first.loc/api/authentication-jwt/Objects/User.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
class User
|
||||
{
|
||||
// Подключение к БД таблице "users"
|
||||
private $conn;
|
||||
private $table_name = "tsd_users";
|
||||
|
||||
// Свойства
|
||||
public $id;
|
||||
public $firstname;
|
||||
public $lastname;
|
||||
public $email;
|
||||
public $password;
|
||||
|
||||
// Конструктор класса User
|
||||
public function __construct($db)
|
||||
{
|
||||
$this->conn = $db;
|
||||
}
|
||||
|
||||
// Метод для создания нового пользователя
|
||||
function create()
|
||||
{
|
||||
|
||||
// Запрос для добавления нового пользователя в БД
|
||||
$query = "INSERT INTO " . $this->table_name . "
|
||||
SET
|
||||
firstname = :firstname,
|
||||
lastname = :lastname,
|
||||
email = :email,
|
||||
password = :password";
|
||||
|
||||
// Подготовка запроса
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// Инъекция
|
||||
$this->firstname = htmlspecialchars(strip_tags($this->firstname));
|
||||
$this->lastname = htmlspecialchars(strip_tags($this->lastname));
|
||||
$this->email = htmlspecialchars(strip_tags($this->email));
|
||||
$this->password = htmlspecialchars(strip_tags($this->password));
|
||||
|
||||
// Привязываем значения
|
||||
$stmt->bindParam(":firstname", $this->firstname);
|
||||
$stmt->bindParam(":lastname", $this->lastname);
|
||||
$stmt->bindParam(":email", $this->email);
|
||||
|
||||
// Для защиты пароля
|
||||
// Хешируем пароль перед сохранением в базу данных
|
||||
$password_hash = password_hash($this->password, PASSWORD_BCRYPT);
|
||||
$stmt->bindParam(":password", $password_hash);
|
||||
|
||||
// Выполняем запрос
|
||||
// Если выполнение успешно, то информация о пользователе будет сохранена в базе данных
|
||||
if ($stmt->execute()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Проверка, существует ли электронная почта в нашей базе данных
|
||||
function emailExists() {
|
||||
|
||||
// Запрос, чтобы проверить, существует ли электронная почта
|
||||
$query = "SELECT id, firstname, lastname, password
|
||||
FROM " . $this->table_name . "
|
||||
WHERE email = :email
|
||||
limit 1
|
||||
";
|
||||
|
||||
// Подготовка запроса
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// Инъекция
|
||||
$this->email=htmlspecialchars(strip_tags($this->email));
|
||||
|
||||
|
||||
// Привязываем значение e-mail
|
||||
// $stmt->bindParam("email", $this->email);
|
||||
|
||||
// Выполняем запрос
|
||||
$stmt->execute(["email"=>$this->email]);
|
||||
|
||||
// Получаем количество строк
|
||||
$num = $stmt->rowCount();
|
||||
|
||||
// Если электронная почта существует,
|
||||
// Присвоим значения свойствам объекта для легкого доступа и использования для php сессий
|
||||
if ($num > 0) {
|
||||
|
||||
// Получаем значения
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
// Присвоим значения свойствам объекта
|
||||
$this->id = $row["id"];
|
||||
$this->firstname = $row["firstname"];
|
||||
$this->lastname = $row["lastname"];
|
||||
$this->password = $row["password"];
|
||||
|
||||
// Вернём "true", потому что в базе данных существует электронная почта
|
||||
return ['result'=>true];
|
||||
}
|
||||
|
||||
// Вернём "false", если адрес электронной почты не существует в базе данных
|
||||
return ['result'=>false,'error'=>$this->conn->errorInfo()];
|
||||
}
|
||||
|
||||
// Здесь будет метод update()
|
||||
// Обновить запись пользователя
|
||||
public function update() {
|
||||
|
||||
// Если в HTML-форме был введен пароль (необходимо обновить пароль)
|
||||
$password_set=!empty($this->password) ? ", password = :password" : "";
|
||||
|
||||
// Если не введен пароль - не обновлять пароль
|
||||
$query = "UPDATE " . $this->table_name . "
|
||||
SET
|
||||
firstname = :firstname,
|
||||
lastname = :lastname,
|
||||
email = :email
|
||||
{$password_set}
|
||||
WHERE id = :id";
|
||||
|
||||
// Подготовка запроса
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// Инъекция (очистка)
|
||||
$this->firstname=htmlspecialchars(strip_tags($this->firstname));
|
||||
$this->lastname=htmlspecialchars(strip_tags($this->lastname));
|
||||
$this->email=htmlspecialchars(strip_tags($this->email));
|
||||
|
||||
// Привязываем значения с HTML формы
|
||||
$stmt->bindParam(":firstname", $this->firstname);
|
||||
$stmt->bindParam(":lastname", $this->lastname);
|
||||
$stmt->bindParam(":email", $this->email);
|
||||
|
||||
// Метод password_hash () для защиты пароля пользователя в базе данных
|
||||
if(!empty($this->password)){
|
||||
$this->password=htmlspecialchars(strip_tags($this->password));
|
||||
$password_hash = password_hash($this->password, PASSWORD_BCRYPT);
|
||||
$stmt->bindParam(":password", $password_hash);
|
||||
}
|
||||
|
||||
// Уникальный идентификатор записи для редактирования
|
||||
$stmt->bindParam(":id", $this->id);
|
||||
|
||||
// Если выполнение успешно, то информация о пользователе будет сохранена в базе данных
|
||||
if($stmt->execute()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user