User.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. require_once("MyPDO.php");
  3. class User
  4. {
  5. private $_login;
  6. private $_password;
  7. private const USER_TABLE = "Users";
  8. public function __construct( string $login, string $password = null )
  9. {
  10. $this->setLogin($login);
  11. $this->setPassword($password);
  12. }
  13. public function login() : string
  14. {
  15. return $this->_login;
  16. }
  17. public function setLogin( string $login ) : void
  18. {
  19. $this->_login = $login;
  20. }
  21. public function password() : string
  22. {
  23. return $this->_password;
  24. }
  25. public function setPassword( ?string $password ) : void
  26. {
  27. $this->_password = $password;
  28. }
  29. public function exists() : bool
  30. {
  31. // 1. On prépare la requête $result
  32. $result = MyPDO::pdo()->prepare('SELECT password FROM '.User::USER_TABLE.' WHERE user = :user');
  33. // 2. On assigne $login au paramêtre :user
  34. $ok = $result->bindValue( ":user", $this->_login, PDO::PARAM_STR );
  35. // 3. On exécute la requête $result
  36. $ok &= $result->execute();
  37. if (!$ok)
  38. throw new Exception("Error: user access in DB failed.");
  39. // 4. On vérifie que l'utilisateur a été trouvé et que son mot de passe
  40. // correspond à celui de l'attribut $this->_password
  41. $user = $result->fetch(PDO::FETCH_ASSOC);
  42. return $user && password_verify($this->_password,$user['password']);
  43. }
  44. public function create() : void
  45. {
  46. $result = MyPDO::pdo()->prepare('INSERT INTO '.User::USER_TABLE.'(user,password) VALUES (:user,:password)');
  47. $ok = $result->bindValue( ":user", $this->_login, PDO::PARAM_STR );
  48. $ok &= $result->bindValue( ":password", password_hash($this->_password,PASSWORD_DEFAULT), PDO::PARAM_STR );
  49. $ok &= $result->execute();
  50. if ( !$ok )
  51. throw new Exception("Error: user creation in DB failed.");
  52. }
  53. public function changePassword( string $newpassword ) : void
  54. {
  55. $result = MyPDO::pdo()->prepare('UPDATE '.User::USER_TABLE.' SET password=:password WHERE user=:login');
  56. $ok = $result->bindValue(':login', $this->_login, PDO::PARAM_STR);
  57. $ok &= $result->bindValue(':password', password_hash($newpassword,PASSWORD_DEFAULT), PDO::PARAM_STR);
  58. $ok &= $result->execute();
  59. if ( !$ok || $result->rowCount() != 1 )
  60. throw new Exception("Error: password updating failed.");
  61. $this->setPassword($newpassword);
  62. }
  63. public function delete() : void
  64. {
  65. $result = MyPDO::pdo()->prepare('DELETE FROM '.User::USER_TABLE.' WHERE user = :login');
  66. $ok = $result->bindValue(':login', $this->_login, PDO::PARAM_STR);
  67. $ok &= $result->execute();
  68. if ( !$ok || $result->rowCount() != 1 )
  69. throw new Exception("Error while deleting your account.");
  70. }
  71. }