186 lines
8.8 KiB
PHP
186 lines
8.8 KiB
PHP
<?php
|
|
session_start();
|
|
require_once 'db/config.php';
|
|
|
|
$success_message = '';
|
|
$error_message = '';
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
try {
|
|
$full_name = $_POST['full_name'] ?? '';
|
|
$email = trim($_POST['email'] ?? '');
|
|
$phone = $_POST['phone'] ?? '';
|
|
$password = $_POST['password'] ?? '';
|
|
$confirm_password = $_POST['confirm_password'] ?? '';
|
|
$blood_type = $_POST['blood_type'] ?? '';
|
|
$organs_to_donate = isset($_POST['organs']) ? implode(', ', $_POST['organs']) : '';
|
|
$medical_history = $_POST['medical_history'] ?? '';
|
|
|
|
if (empty($full_name) || empty($email) || empty($password) || empty($blood_type) || empty($organs_to_donate)) {
|
|
throw new Exception('Please fill all required fields.');
|
|
}
|
|
|
|
if ($password !== $confirm_password) {
|
|
throw new Exception('Passwords do not match.');
|
|
}
|
|
|
|
$password_hash = password_hash($password, PASSWORD_DEFAULT);
|
|
|
|
$stmt = db()->prepare(
|
|
'INSERT INTO donors (full_name, email, phone, blood_type, organs_to_donate, medical_history, password_hash) VALUES (?, ?, ?, ?, ?, ?, ?)'
|
|
);
|
|
$stmt->execute([$full_name, $email, $phone, $blood_type, $organs_to_donate, $medical_history, $password_hash]);
|
|
|
|
$donor_id = db()->lastInsertId();
|
|
$_SESSION['user_id'] = $donor_id;
|
|
$_SESSION['user_type'] = 'donor';
|
|
$_SESSION['user_email'] = $email;
|
|
|
|
header("Location: dashboard.php");
|
|
exit;
|
|
} catch (PDOException $e) {
|
|
if ($e->getCode() == 23000) { // Integrity constraint violation (duplicate entry)
|
|
$error_message = "The email address you entered is already registered.";
|
|
} else {
|
|
$error_message = "An error occurred while processing your request. Please try again later.";
|
|
}
|
|
} catch (Exception $e) {
|
|
$error_message = $e->getMessage();
|
|
}
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Organ Donation Donor Registration</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link rel="stylesheet" href="assets/css/custom.css">
|
|
</head>
|
|
<body>
|
|
|
|
<header class="header-gradient text-white p-4">
|
|
<div class="container">
|
|
<h1>Organ Donation Management</h1>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container mt-5">
|
|
<div class="row justify-content-center">
|
|
<div class="col-md-8">
|
|
<div class="card shadow-sm">
|
|
<div class="card-body">
|
|
<h2 class="card-title text-center mb-4">Donor Registration</h2>
|
|
|
|
<?php if ($success_message): ?>
|
|
<div class="alert alert-success"><?php echo $success_message; ?></div>
|
|
<?php endif; ?>
|
|
<?php if ($error_message): ?>
|
|
<div class="alert alert-danger"><?php echo $error_message; ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form action="donor_registration.php" method="POST" class="needs-validation" novalidate>
|
|
<div class="mb-3">
|
|
<label for="full_name" class="form-label">Full Name</label>
|
|
<input type="text" class="form-control" id="full_name" name="full_name" required>
|
|
<div class="invalid-feedback">Please enter your full name.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="email" class="form-label">Email address</label>
|
|
<input type="email" class="form-control" id="email" name="email" required>
|
|
<div class="invalid-feedback">Please enter a valid email address.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="password" class="form-label">Password</label>
|
|
<input type="password" class="form-control" id="password" name="password" required>
|
|
<div class="invalid-feedback">Please enter a password.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="confirm_password" class="form-label">Confirm Password</label>
|
|
<input type="password" class="form-control" id="confirm_password" name="confirm_password" required>
|
|
<div class="invalid-feedback">Please confirm your password.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="phone" class="form-label">Phone Number</label>
|
|
<input type="tel" class="form-control" id="phone" name="phone">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="blood_type" class="form-label">Blood Type</label>
|
|
<select class="form-select" id="blood_type" name="blood_type" required>
|
|
<option value="" disabled selected>Select your blood type</option>
|
|
<option value="A+">A+</option>
|
|
<option value="A-">A-</option>
|
|
<option value="B+">B+</option>
|
|
<option value="B-">B-</option>
|
|
<option value="AB+">AB+</option>
|
|
<option value="AB-">AB-</option>
|
|
<option value="O+">O+</option>
|
|
<option value="O-">O-</option>
|
|
</select>
|
|
<div class="invalid-feedback">Please select your blood type.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Organs to Donate</label>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="organs[]" value="Kidney" id="org_kidney">
|
|
<label class="form-check-label" for="org_kidney">Kidney</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="organs[]" value="Liver" id="org_liver">
|
|
<label class="form-check-label" for="org_liver">Liver</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="organs[]" value="Heart" id="org_heart">
|
|
<label class="form-check-label" for="org_heart">Heart</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="organs[]" value="Lungs" id="org_lungs">
|
|
<label class="form-check-label" for="org_lungs">Lungs</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="organs[]" value="Pancreas" id="org_pancreas">
|
|
<label class="form-check-label" for="org_pancreas">Pancreas</label>
|
|
</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="medical_history" class="form-label">Brief Medical History (optional)</label>
|
|
<textarea class="form-control" id="medical_history" name="medical_history" rows="3"></textarea>
|
|
</div>
|
|
<div class="d-grid">
|
|
<button type="submit" class="btn btn-primary">Register as Donor</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<footer class="text-center p-4 mt-5">
|
|
<p>© <?php echo date('Y'); ?> Organ Donation Management System</p>
|
|
</footer>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
<script>
|
|
// Bootstrap form validation
|
|
(() => {
|
|
'use strict'
|
|
|
|
const forms = document.querySelectorAll('.needs-validation')
|
|
|
|
Array.from(forms).forEach(form => {
|
|
form.addEventListener('submit', event => {
|
|
if (!form.checkValidity()) {
|
|
event.preventDefault()
|
|
event.stopPropagation()
|
|
}
|
|
|
|
form.classList.add('was-validated')
|
|
}, false)
|
|
})
|
|
})()
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|