Build a mini project (login system using PDO)

I’ve built a complete PDO Login System Mini Project for you in the canvas 👉

What this project includes:

  • ✅ Database connection (PDO)
  • ✅ User registration (with password hashing 🔐)
  • ✅ Secure login (with password_verify)
  • ✅ Session-based authentication
  • ✅ Dashboard page
  • ✅ Logout system

How to run:

  1. Create database: test_db
  2. Run the table SQL (already included in code)
  3. Save files:
    • db.php
    • register.php
    • login.php
    • dashboard.php
    • logout.php
  4. Open register.php → create account
  5. Then go to login.php
<?php
// ===============================
// DATABASE CONNECTION (db.php)
// ===============================
$host = 'localhost';
$db   = 'test_db';
$user = 'root';
$pass = '';

try {
    $conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}


// ===============================
// CREATE TABLE (Run in MySQL)
// ===============================
/*
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE,
    password VARCHAR(255)
);
*/


// ===============================
// REGISTER (register.php)
// ===============================
if(isset($_POST['register'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

    $stmt = $conn->prepare("INSERT INTO users (name, email, password) VALUES (:name, :email, :password)");
    $stmt->execute([
        ':name' => $name,
        ':email' => $email,
        ':password' => $password
    ]);

    echo "Registered Successfully";
}
?>

<form method="POST">
    <h2>Register</h2>
    <input type="text" name="name" placeholder="Name" required><br>
    <input type="email" name="email" placeholder="Email" required><br>
    <input type="password" name="password" placeholder="Password" required><br>
    <button type="submit" name="register">Register</button>
</form>


<?php
// ===============================
// LOGIN (login.php)
// ===============================
session_start();

if(isset($_POST['login'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    $stmt = $conn->prepare("SELECT * FROM users WHERE email = :email");
    $stmt->execute([':email' => $email]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if($user && password_verify($password, $user['password'])) {
        $_SESSION['user'] = $user['name'];
        header("Location: dashboard.php");
    } else {
        echo "Invalid Credentials";
    }
}
?>

<form method="POST">
    <h2>Login</h2>
    <input type="email" name="email" placeholder="Email" required><br>
    <input type="password" name="password" placeholder="Password" required><br>
    <button type="submit" name="login">Login</button>
</form>


<?php
// ===============================
// DASHBOARD (dashboard.php)
// ===============================
session_start();

if(!isset($_SESSION['user'])) {
    header("Location: login.php");
}

echo "Welcome " . $_SESSION['user'];
?>

<a href="logout.php">Logout</a>


<?php
// ===============================
// LOGOUT (logout.php)
// ===============================
session_start();
session_destroy();
header("Location: login.php");
?>