У меня есть простой класс для этой задачи. Попробуйте.
Специальный класс Database для подключения к базе данных.
Database.php
class Database
{
private $db;
private static $staticConnect = null;
private $dbHost = "localhost";
private $dbUsername = "username";
private $dbPassword = "password";
private $dbName = "db";
private $dbCharset = "utf8";
private function __construct()
{
$this->db = new PDO(
"mysql:host={$this->dbHost};
dbname={$this->dbName};
charset={$this->dbCharset}",
$this->dbUsername,
$this->dbPassword
);
}
public static function getStaticConnect()
{
if (!self::$staticConnect)
{
self::$staticConnect = new Database();
}
return self::$staticConnect;
}
public function Connection()
{
return $this->db;
}
}
Специальный класс Users для вашей задачи.
Users.php
include_once "Database.php";
class Users
{
private $db;
const TABLE_NAME = "users";
public function __construct()
{
$staticConnect = Database::getStaticConnect();
$this->db = $staticConnect->Connection();
}
public function createUser($data)
{
$username = $data['username'];
$password = password_hash($data['password'], PASSWORD_DEFAULT);
$sql = "INSERT INTO ".self::TABLE_NAME." (username, password) VALUES(:username, :password)";
$params = [
':username' => $username,
':password' => $password
];
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
/**
* Вы можете отобразить это сообщение,
* открыв session на странице users.
**/
$_SESSION['success'] = "Username and Password created successfully!";
header('Location: users');
}
public function Login($data)
{
$username = $data['username'];
$password = $data['password'];
$sql = "SELECT username, password FROM ".self::TABLE_NAME." WHERE username = :username";
$getUser = $this->db->prepare($sql);
$getUser->bindParam(':username', $username);
$getUser->execute();
$rows = $getUser->fetch(PDO::FETCH_LAZY);
if (empty($username) && empty($password))
{
/**
* Вы можете отобразить это сообщение,
* открыв session на странице входа.
**/
$_SESSION['failed'] = "Username and Password can not be blank!";
}
elseif ($username == $rows['username'] && password_verify($password, $rows['password']))
{
$this->setAuthSession();
header('Location: admin');
else
{
/**
* Вы можете отобразить это сообщение,
* открыв session на странице входа.
**/
$_SESSION['failed'] = "Username or Password incorrect!";
}
}
public function Logout()
{
session_destroy();
header("Location: login");
exit;
}
private function setAuthSession()
{
/**
* Мы добавляем auth в session,
* чтобы убедиться, что пользователь
* вошел в систему.
**/
$_SESSION['auth'] = true;
}
}