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!