Login and Register Dashboard PHP

Login and Register Dashboard PHP

 Database Structure: users Table

CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL );

Folder Structure

project/ │ ├── config.php ├── register.php ├── login.php ├── logout.php ├── welcome.php

config.php – Database Connection

<?php $host = 'localhost'; $dbname = 'your_db'; $user = 'your_user'; $pass = 'your_password'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("DB Connection Failed: " . $e->getMessage()); } session_start(); ?>

register.php – Registration Page

<?php include 'config.php'; ?> <?php $errors = []; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $name = trim($_POST['name']); $email = trim($_POST['email']); $password = $_POST['password']; if (empty($name) || empty($email) || empty($password)) { $errors[] = "All fields are required."; } if (empty($errors)) { $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); if ($stmt->rowCount() > 0) { $errors[] = "Email already exists."; } else { $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?)"); if ($stmt->execute([$name, $email, $hashedPassword])) { $_SESSION['user'] = [ 'id' => $pdo->lastInsertId(), 'name' => $name, 'email' => $email ]; header("Location: welcome.php"); exit; } else { $errors[] = "Something went wrong."; } } } } ?> <!DOCTYPE html> <html> <head> <title>Register</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body class="bg-light"> <div class="container mt-5"> <h2>Register</h2> <?php if (!empty($errors)): ?> <div class="alert alert-danger"> <?= implode('<br>', $errors) ?> </div> <?php endif; ?> <form method="POST" class="card p-4 shadow-sm"> <div class="mb-3"> <label>Name</label> <input type="text" name="name" class="form-control" required> </div> <div class="mb-3"> <label>Email</label> <input type="email" name="email" class="form-control" required> </div> <div class="mb-3"> <label>Password</label> <input type="password" name="password" class="form-control" required> </div> <button class="btn btn-primary w-100">Register</button> <div class="mt-3 text-center"> Already have an account? <a href="login.php">Login</a> </div> </form> </div> </body> </html>

login.php – Login Page

<?php include 'config.php'; ?> <?php $errors = []; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $email = trim($_POST['email']); $password = $_POST['password']; if (empty($email) || empty($password)) { $errors[] = "Both fields are required."; } else { $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { $_SESSION['user'] = [ 'id' => $user['id'], 'name' => $user['name'], 'email' => $user['email'] ]; header("Location: welcome.php"); exit; } else { $errors[] = "Invalid email or password."; } } } ?> <!DOCTYPE html> <html> <head> <title>Login</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body class="bg-light"> <div class="container mt-5"> <h2>Login</h2> <?php if (!empty($errors)): ?> <div class="alert alert-danger"> <?= implode('<br>', $errors) ?> </div> <?php endif; ?> <form method="POST" class="card p-4 shadow-sm"> <div class="mb-3"> <label>Email</label> <input type="email" name="email" class="form-control" required> </div> <div class="mb-3"> <label>Password</label> <input type="password" name="password" class="form-control" required> </div> <button class="btn btn-success w-100">Login</button> <div class="mt-3 text-center"> Don't have an account? <a href="register.php">Register</a> </div> </form> </div> </body> </html>

welcome.php – Protected Dashboard Page

<?php include 'config.php'; if (!isset($_SESSION['user'])) { header('Location: login.php'); exit; } $user = $_SESSION['user']; ?> <!DOCTYPE html> <html> <head> <title>Welcome</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body class="bg-light"> <div class="container mt-5"> <div class="card p-4 shadow-sm"> <h3>Welcome, <?= htmlspecialchars($user['name']) ?>!</h3> <p>Email: <?= htmlspecialchars($user['email']) ?></p> <a href="logout.php" class="btn btn-danger mt-3">Logout</a> </div> </div> </body> </html>

logout.php – Logout Script

<?php session_start(); session_destroy(); header('Location: login.php'); exit;

Let me know if you want to:

  • Add email verification

  • Use AJAX for the forms

  • Store login logs

  • Add remember me or reset password features
    I can help you extend this!



Soeng Souy

Soeng Souy

Website that learns and reads, PHP, Framework Laravel, How to and download Admin template sample source code free.

Post a Comment

CAN FEEDBACK
close