diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index cde35241cb624a07b5ce1e0acc950fbabe36de4e..f644678939f1569675e8a337566a24bf47e46f34 100644 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -31,5 +31,39 @@ class UserController { return $this->userModel->getAllUsers(); } + public function registerUser($name, $username, $email, $password, $isAdmin) { + return $this->createUser($name, $username, $email, password_hash($password,PASSWORD_DEFAULT), $isAdmin); + } + + public function loginByEmail($email,$password) { + $user = $this->userModel->getUserByEmail($email); + if ($user !== false && password_verify($password, $user['user_hashedPass'])) { + $_SESSION["user_id"] = $user['user_ID']; + return "success"; + } else { + return "wrong credentials"; + } + } + + public function loginByUsername($username,$password) { + $user = $this->userModel->getUserByUsername($username); + if ($user !== false && password_verify($password, $user['user_hashedPass'])) { + $_SESSION["user_id"] = $user['user_ID']; + return "success"; + } else { + return "wrong credentials"; + } + } + + public function logout() { + if (isset($_SESSION["user_id"])) { + unset($_SESSION["user_id"]); + session_destroy(); + return "logout successful"; + } else { + return "user not logged in"; + } + } + } ?> diff --git a/app/Models/User.php b/app/Models/User.php index 4c319362abf09149a34f76a107193583df3c30c4..189678fab36389ab260092117ed12144614a4dca 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,12 +7,24 @@ require_once(__DIR__ . '/../../db/connect.php'); class UserModel { public function createUser($name, $username, $email, $hashedPass, $isAdmin) { global $db; - - $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)"); - $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]); - - return "User created successfully"; + + try { + $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]); + + return "User created successfully"; + } catch (PDOException $e) { + // Check if the error code corresponds to a unique constraint violation. + if ($e->getCode() === '23000') { + // Handle the error as a duplicate entry. + return "Username or email already exists. Please choose a different one."; + } else { + // Handle other database errors. + return "Database error: " . $e->getMessage(); + } + } } + public function getUser($userId) { global $db; @@ -23,6 +35,24 @@ class UserModel { return $stmt->fetch(PDO::FETCH_ASSOC); } + public function getUserByEmail($email) { + global $db; + + $stmt = $db->prepare("SELECT * FROM users WHERE user_email = ?"); + $stmt->execute([$email]); + + return $stmt->fetch(PDO::FETCH_ASSOC); + } + + public function getUserByUsername($username){ + global $db; + + $stmt = $db->prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + + return $stmt->fetch(PDO::FETCH_ASSOC); + } + public function updateUser($userId, $name, $username, $email, $hashedPass, $isAdmin) { global $db; diff --git a/db/init.sql b/db/init.sql index 10b3a9049eece7f604553f88d2ec1dc57406c6db..d009cd96e21e3ee94a27815b4742247ee2461dd9 100644 --- a/db/init.sql +++ b/db/init.sql @@ -21,8 +21,8 @@ CREATE TABLE IF NOT EXISTS tickets ( CREATE TABLE IF NOT EXISTS users ( user_ID INT AUTO_INCREMENT PRIMARY KEY, user_name CHAR(255), - username CHAR(255), - user_email VARCHAR(255), + username CHAR(255) UNIQUE, + user_email VARCHAR(255) UNIQUE, user_hashedPass CHAR(255), isAdmin BOOLEAN ); diff --git a/home.php b/home.php index 77633f7790eb40f3c32a9fb537aa294e9a643ab6..de6a1bd80f3663ed568a4496d4586de6b7225a27 100644 --- a/home.php +++ b/home.php @@ -1,5 +1,6 @@ <?php // home.php +session_start(); var_dump($_POST); // require_once './app/EventController.php'; require_once './app/Controllers/PembelianController.php'; @@ -80,10 +81,10 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $userName = $_POST['userName']; $userUsername = $_POST['userUsername']; $userEmail = $_POST['userEmail']; - $userPassword = password_hash($_POST['userPassword'], PASSWORD_DEFAULT); + $userPassword = $_POST['userPassword']; $isAdmin = isset($_POST['isAdmin']) ? 1 : 0; - $userController->createUser($userName, $userUsername, $userEmail, $userPassword, $isAdmin); + echo $userController->registerUser($userName, $userUsername, $userEmail, $userPassword, $isAdmin); } elseif ($_POST['userAction'] === 'updateUser') { $userIdUpdate = $_POST['userIdUpdate']; $userNameUpdate = $_POST['userNameUpdate']; @@ -96,6 +97,12 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { } elseif ($_POST['userAction'] === 'deleteUser') { $userIdDelete = $_POST['userIdDelete']; $userController->deleteUser($userIdDelete); + } elseif ($_POST['userAction'] === 'login') { + $loginUsername = $_POST['loginUsername']; + $loginPassword = $_POST['loginPassword']; + echo $userController->loginByEmail($loginUsername,$loginPassword); + } elseif ($_POST['userAction'] === 'logout') { + echo $userController->logout(); } } } @@ -190,6 +197,16 @@ $users = $userController->getAllUsers(); <label>Delete User:</label> <input type="text" name="userIdDelete" placeholder="User ID"> <button type="submit" name="userAction" value="deleteUser">Delete</button> + + <!-- login --> + <label>login:</label> + <input type="email" name="loginUsername" placeholder="mail"> + <input type="password" name="loginPassword" placeholder="Password"> + <button type="submit" name="userAction" value="login">login</button> + + <!-- logout --> + <label>Logout:</label> + <button type="submit" name="userAction" value="logout">logout</button> </form>