How to develop Projects Using PHP and Mysql
Part 5
Register and login page (
after using bootstrap)
1. Register.php
<?php require_once '../database/db_config.php'; session_start(); $name = mysqli_real_escape_string($conn,
trim($_POST['name'])); $email = mysqli_real_escape_string($conn,
trim($_POST['email'])); $password
= trim($_POST['password']); $confirm_password
= trim($_POST['confirm_password']); $phone = mysqli_real_escape_string($conn,
trim($_POST['phone'])); $role = mysqli_real_escape_string($conn,
trim($_POST['role'])); if (empty($name)
|| empty($email) || empty($password) || empty($confirm_password) || empty($role))
{
$errors[] = "All fields except phone are required!"; }
$errors[] = "Invalid email format!"; }
$errors[] = "Invalid phone number!"; }
$errors[] = "Password must be at least 6 characters!"; }
$errors[] = "Passwords do not match!"; }
$admin_check_query = "SELECT id FROM users WHERE role =
'admin'";
$admin_result = mysqli_query($conn, $admin_check_query);
if (mysqli_num_rows($admin_result) > 0) {
$errors[] = "Only one admin is allowed!";
} } $email_result
= mysqli_query($conn, $email_check_query); if (mysqli_num_rows($email_result)
> 0) {
$errors[] = "Email already registered!"; } if (empty($errors))
{
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
$insert_query = "INSERT INTO users (name, email, password, phone,
role)
VALUES
('$name', '$email', '$hashed_password', '$phone', '$role')";
if (mysqli_query($conn, $insert_query)) {
$_SESSION['success'] = "Registration successful!
You can now log in.";
header("Location: login.php");
exit();
} else {
$errors[] = "Registration failed! Please try
again.";
} } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"
content="width=device-width, initial-scale=1.0"> <title>Register</title> <style>
body {
font-family: 'Arial', sans-serif;
background: url('../assets/images/1.jpeg') no-repeat center
center/cover;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
width: 420px;
background: #fff;
padding: 25px;
border-radius: 10px;
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.2);
}
h2 {
text-align: center;
margin-bottom: 15px;
color: #333;
}
.form-container {
max-height: 350px;
overflow-y: auto;
padding-right: 5px;
}
.form-group {
display: flex;
align-items: center;
margin-bottom: 15px;
}
.form-group label {
flex: 1;
font-weight: 600;
font-size: 14px;
color: #555;
}
.form-group input,
.form-group select {
flex: 2;
padding: 8px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 14px;
}
.error, .success {
padding: 10px;
margin-bottom: 10px;
font-size: 14px;
border-radius: 5px;
}
.error {
background: #ffcccc;
border-left: 5px solid red;
color: #a00;
}
.success {
background: #ccffcc;
border-left: 5px solid green;
color: #060;
}
.form-group input:focus {
border-color: #007bff;
outline: none;
}
button {
width: 100%;
padding: 10px;
background: #007bff;
color: white;
border: none;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
margin-top: 10px;
}
button:hover {
background: #0056b3;
}
.login-link {
text-align: center;
margin-top: 15px;
font-size: 14px;
}
.login-link a {
color: #007bff;
text-decoration: none;
}
.login-link a:hover {
text-decoration: underline;
} </style> </head> <body> <h2>Register</h2>
<div class="error">
<?php foreach ($errors as $error): ?>
<p><?= $error ?></p>
<?php endforeach; ?>
</div> <?php endif;
?> <?php if
(isset($_SESSION['success'])): ?>
<div class="success">
<p><?= $_SESSION['success'] ?></p>
</div>
<?php unset($_SESSION['success']); ?> <?php endif;
?> <div class="form-container">
<form action="register.php" method="POST">
<div class="form-group">
<label for="name">Full
Name:</label>
<input type="text" name="name"
required>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" name="email"
required>
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" name="password"
required>
</div>
<div class="form-group">
<label for="confirm_password">Confirm
Password:</label>
<input type="password" name="confirm_password"
required>
</div>
<div class="form-group">
<label for="phone">Phone:</label>
<input type="text" name="phone">
</div>
<div class="form-group">
<label for="role">Select
Role:</label>
<select name="role" required>
<option value="user">User</option>
<option value="admin">Admin</option>
</select>
</div>
<button type="submit">Register</button>
</form> </div> <p class="login-link">Already
have an account? <a href="login.php">Login here</a>.</p> </div> </body> </html> |
Login.php
<?php require_once '../database/db_config.php'; session_start(); if ($_SERVER["REQUEST_METHOD"]
== "POST") { $email = trim($_POST['email']); $password
= trim($_POST['password']); $errors =
[]; //
Validate input fields if (empty($email)
|| empty($password)) {
$errors[] = "Email and Password are required!"; } elseif
(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Invalid email format!"; } if (empty($errors))
{
// Fetch user details from the database
$query = "SELECT * FROM users WHERE email = '$email'";
$result = mysqli_query($conn, $query);
if ($row = mysqli_fetch_assoc($result)) {
// Verify the hashed password
if (password_verify($password, $row['password'])) {
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_name'] = $row['name'];
$_SESSION['user_email'] = $row['email'];
$_SESSION['user_role'] = $row['role'];
// Redirect user based on role
if ($row['role'] === 'admin') {
header("Location:
../admin/admin_dashboard.php");
} else {
header("Location:
../user/user_dashboard.php");
}
exit();
} else {
$errors[] = "Incorrect
password!";
}
} else {
$errors[] = "No account found with this
email!";
} } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"
content="width=device-width, initial-scale=1.0"> <title>Login</title> <link rel="stylesheet"
href="../assets/css/style.css"> <style>
/* Page Styling */
body {
font-family: Arial, sans-serif;
background-color: #f8f9fa;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
flex-grow: 1; /* Push footer to the bottom */
display: flex;
justify-content: center;
align-items: center;
height: calc(100vh - 120px); /* Adjust height between
navbar & footer */
padding: 20px;
}
.login-box {
background: white;
padding: 30px;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
border-radius: 8px;
width: 100%;
max-width: 400px;
text-align: center;
}
h2 {
margin-bottom: 20px;
color: #333;
}
.error {
color: red;
margin-bottom: 15px;
}
form {
display: flex;
flex-direction: column;
}
label {
text-align: left;
font-weight: bold;
margin: 10px 0 5px;
}
input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
width: 100%;
}
button {
background: #007bff;
color: white;
border: none;
padding: 10px;
border-radius: 5px;
cursor: pointer;
margin-top: 15px;
font-size: 16px;
}
button:hover {
background: #0056b3;
}
p {
margin-top: 10px;
}
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
} </style> </head> <body> <?php include '../includes/navbar.php';
?> <div class="container"> <div class="login-box">
<h2>Login</h2>
<?php if (!empty($errors)) { ?>
<div class="error">
<?php foreach ($errors as $error) {
echo "<p>$error</p>";
} ?>
</div>
<?php } ?>
<form action="login.php" method="POST">
<label for="email">Email:</label>
<input type="email" name="email" required>
<label for="password">Password:</label>
<input type="password" name="password"
required>
<button type="submit">Login</button>
</form>
<p>Don't have an account? <a href="register.php">Register
here</a>.</p> </div> </div> <?php include '../includes/footer.php';
?> </body> </html> |