Unable to register new user on the register.php page
website: http://nasax.xyz
Please help me fix the code for this files, it is a website created on php, mysql, javascript, html, css, bootstrap, and flexbox.
Registering a new user is not working correctly, please help me fix this issue
I would also love to add the function to send the password to the users email address automatically
error message: “A system error occurred. Please try again later.”
I’ve posted here all the code of each file:
register_user.php file code:
<?php
error_reporting(-1);
ini_set('display_errors', 'On');
ini_set('display_startup_errors', 'On');
session_start();
require_once 'db.php';
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$errors = []; // Initialize errors array
// Input Sanitization and Validation
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Invalid email format.";
}
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
if (!filter_var($username, FILTER_SANITIZE_STRING)) {
$errors[] = "Invalid username format.";
}
$password = $_POST['password'];
// Password Strength Validation
if (strlen($password) < 8) {
$errors[] = "Password must be at least 8 characters long.";
}
// ... (Rest of your password validation checks)
function emailExists($email) {
global $pdo; // Access the $pdo database connection object
try {
$sql = "SELECT id FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => $email]);
// Return true if a user with the email is found, false otherwise
return $stmt->fetchColumn() > 0;
} catch (PDOException $e) {
error_log("emailExists Error: " . $e->getMessage());
return false; // Handle database errors gracefully
}
}
function usernameExists($username) {
global $pdo;
try {
$sql = "SELECT id FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->execute(['username' => $username]);
return $stmt->fetchColumn() > 0;
} catch (PDOException $e) {
error_log("usernameExists Error: " . $e->getMessage());
return false;
}
}
// Check for Existing Email and Username
if (emailExists($email)) {
$errors[] = "Email already registered.";
}
if (usernameExists($username)) {
$errors[] = "Username already exists. Please choose a different one.";
}
// Registration Logic (If no errors)
if (empty($errors)) {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
try {
$sql = "INSERT INTO users (email, password, username, created_at) VALUES (?, ?, ?, NOW())";
$stmt = $pdo->prepare($sql);
$stmt->execute([$email, $hashedPassword, $username]);
// Success Handling
$_SESSION['success'] = "User registered successfully. Please log in.";
header('Location: login.php');
exit();
} catch (PDOException $e) {
error_log("Error during user insertion: " . $e->getMessage());
$errors[] = "A system error occurred. Please try again later."; // User-friendly message
}
}
// If errors exist, store in session and redirect
if (!empty($errors)) {
$_SESSION['error'] = $errors;
header('Location: register.php');
exit();
}
}
register.php code:
this is register.php file code
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
session_start();
if (isset($_SESSION['error'])): ?>
<ul class="errors">
<?php foreach ($_SESSION['error'] as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
<?php unset($_SESSION['error']); ?>
<?php endif; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Register - NASA-X Info Portal</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="css/styles.css"> <!-- Make sure this path is correct -->
<style>
.btn-primary {
background-color: #007bff; /* Bootstrap primary button color */
}
.parent-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
</style>
</head>
<body class="d-flex flex-column h-100">
<!-- NAVBAR SECTION -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
<div class="container">
<a class="navbar-brand" href="index.php">
<img src="images/nasa.png" alt="NASA Logo" style="height: 30px;">
<img src="images/spacex.png" alt="SpaceX Logo" style="height: 30px;">
<img src="images/nasax_logo.png" alt="NASA-X Logo" style="height: 30px;">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="index.php"><i class="fas fa-home"></i> Home</a>
</li>
<?php if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true): ?>
<!-- User Dashboard Link -->
<li class="nav-item">
<a class="nav-link" href="dashboard.php"><i class="fas fa-user-circle"></i> Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link" href="logout.php"><i class="fas fa-sign-out-alt"></i> Logout</a>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="login.php"><i class="fas fa-sign-in-alt"></i> Login</a>
</li>
<li class="nav-item">
<a class="nav-link" href="register.php"><i class="fas fa-user-plus"></i> Register</a>
</li>
<?php endif; ?>
<li class="nav-item">
<a class="nav-link" href="contact.php"><i class="fas fa-envelope"></i> Contact</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- END OF NAVBAR SECTION -->
<!-- Page Content -->
<div id="page-content" class="register parent-container">
<form class="register-form" action="register_user.php" method="post">
<h2 class="mt-5 text-center">Register</h2>
<div class="form-group">
<label>Username</label>
<input type="text" id="username" name="username" required class="form-control">
</div>
<div class="form-group">
<label>Email</label>
<input type="email" id="email" name="email" required class="form-control">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" id="password" name="password" required class="form-control">
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Register</button>
</div>
</form>
</div>
<!-- Bootstrap JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+" crossorigin="anonymous"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
and here is working login_user.php file code:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
session_start();
require_once('db.php');
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT id, email, password_hash FROM users WHERE email = ?");
$stmt->execute([$email]);
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (password_verify($password, $row['password_hash'])) {
// Successful login
$_SESSION['user_email'] = $row['email'];
$_SESSION['loggedin'] = true;
// Set other relevant session variables if needed
header("Location: dashboard.php"); // Or another appropriate page
exit();
} else {
// Incorrect password
$_SESSION['login_error'] = "Incorrect email or password.";
header('Location: login.php');
exit();
}
} else {
// Email not found
$_SESSION['login_error'] = "Incorrect email or password."; // Same message for security
header('Location: login.php');
exit();
}
} else {
// Not a POST request
header('Location: login.php');
exit();
}
?>
login.php code:
<?php
// 1. Database Connection with Error Handling
require_once 'db.php';
// ...
// 2. Session Start
session_start();
/*
// 3. Authentication
if (isset($_SESSION['user_email'])) {
header("Location: dashboard.php");
exit;
}
*/
// Check for 'login_required' error (only if NOT already logged in)
if (!$userLoggedIn && isset($_GET['error']) && $_GET['error'] === 'login_required') {
echo '<div class="alert alert-warning">You must be logged in to access this page.</div>';
}
// ... (Rest of your login form)
// Display other login errors (if existing)
if (isset($_SESSION['login_error'])) {
echo '<div class="alert alert-danger" role="alert">' .
htmlspecialchars($_SESSION['login_error']) .
'</div>';
unset($_SESSION['login_error']);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Login - NASA-X Info Portal</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="css/styles.css"> <!-- Make sure this path is correct -->
<style>
.btn-primary {
background-color: #007bff; /* Bootstrap primary button color */
}
.parent-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
</style>
</head>
<body class="d-flex flex-column h-100">
<!-- Navbar -->
<!-- Navigation Bar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
<div class="container">
<a class="navbar-brand" href="index.php">
<img src="images/nasa.png" alt="NASA Logo" style="height: 30px;">
<img src="images/spacex.png" alt="SpaceX Logo" style="height: 30px;">
<img src="images/nasax_logo.png" alt="NASA-X Logo" style="height: 30px;">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="index.php"><i class="fas fa-home"></i> Home</a>
</li>
<!-- User Dashboard Link -->
<li class="nav-item">
<a class="nav-link" href="dashboard.php"><i class="fas fa-user-circle"></i> Dashboard</a>
</li>
<?php if ($userLoggedIn): ?>
<li class="nav-item">
<a class="nav-link" href="logout.php"><i class="fas fa-sign-out-alt"></i> Logout</a>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="login.php"><i class="fas fa-sign-in-alt"></i> Login</a>
</li>
<li class="nav-item">
<a class="nav-link" href="register.php"><i class="fas fa-user-plus"></i> Register</a>
</li>
<?php endif; ?>
<li class="nav-item">
<a class="nav-link" href="contact.php"><i class="fas fa-envelope"></i> Contact</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page Content -->
<div id="page-content" class="login parent-container">
<form class="login-form" action="login_user.php" method="post">
<h2 class="mt-5 text-center">Login</h2>
<?php if (isset($error)): ?>
<div class="alert alert-danger" role="alert">
<?= htmlspecialchars($error) ?>
</div>
<?php endif; ?>
<div class="form-group">
<label>Email</label>
<input type="email" name="email" class="form-control <?= isset($email_err) && !empty($email_err) ? 'is-invalid' : ''; ?>" required>
<span class="invalid-feedback"><?= $email_err ?? ''; ?></span>
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control <?= isset($password_err) && !empty($password_err) ? 'is-invalid' : ''; ?>" required>
<span class="invalid-feedback"><?= $password_err ?? ''; ?></span>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
</div>
<!-- Bootstrap JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+" crossorigin="anonymous"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>