| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- require_once("MyPDO.php");
- class User
- {
- private $_login;
- private $_password;
- private const USER_TABLE = "Users";
- public function __construct( string $login, string $password = null )
- {
- $this->setLogin($login);
- $this->setPassword($password);
- }
- public function login() : string
- {
- return $this->_login;
- }
- public function setLogin( string $login ) : void
- {
- $this->_login = $login;
- }
- public function password() : string
- {
- return $this->_password;
- }
- public function setPassword( ?string $password ) : void
- {
- $this->_password = $password;
- }
- public function exists() : bool
- {
- // 1. On prépare la requête $result
- $result = MyPDO::pdo()->prepare('SELECT password FROM '.User::USER_TABLE.' WHERE user = :user');
- // 2. On assigne $login au paramêtre :user
- $ok = $result->bindValue( ":user", $this->_login, PDO::PARAM_STR );
- // 3. On exécute la requête $result
- $ok &= $result->execute();
- if (!$ok)
- throw new Exception("Error: user access in DB failed.");
- // 4. On vérifie que l'utilisateur a été trouvé et que son mot de passe
- // correspond à celui de l'attribut $this->_password
- $user = $result->fetch(PDO::FETCH_ASSOC);
- return $user && password_verify($this->_password,$user['password']);
- }
- public function create() : void
- {
- $result = MyPDO::pdo()->prepare('INSERT INTO '.User::USER_TABLE.'(user,password) VALUES (:user,:password)');
- $ok = $result->bindValue( ":user", $this->_login, PDO::PARAM_STR );
- $ok &= $result->bindValue( ":password", password_hash($this->_password,PASSWORD_DEFAULT), PDO::PARAM_STR );
- $ok &= $result->execute();
- if ( !$ok )
- throw new Exception("Error: user creation in DB failed.");
- }
- public function changePassword( string $newpassword ) : void
- {
- $result = MyPDO::pdo()->prepare('UPDATE '.User::USER_TABLE.' SET password=:password WHERE user=:login');
- $ok = $result->bindValue(':login', $this->_login, PDO::PARAM_STR);
- $ok &= $result->bindValue(':password', password_hash($newpassword,PASSWORD_DEFAULT), PDO::PARAM_STR);
- $ok &= $result->execute();
- if ( !$ok || $result->rowCount() != 1 )
- throw new Exception("Error: password updating failed.");
- $this->setPassword($newpassword);
- }
- public function delete() : void
- {
- $result = MyPDO::pdo()->prepare('DELETE FROM '.User::USER_TABLE.' WHERE user = :login');
- $ok = $result->bindValue(':login', $this->_login, PDO::PARAM_STR);
- $ok &= $result->execute();
- if ( !$ok || $result->rowCount() != 1 )
- throw new Exception("Error while deleting your account.");
- }
- }
|