34981-vm/doctor-registration.php
Flatlogic Bot e59c8581a5 1.0.1
2025-10-15 18:48:09 +00:00

238 lines
12 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
$success_message = '';
$error_message = '';
$hospitals = [];
try {
$pdo = db();
// Fetch hospitals for the dropdown
$stmt = $pdo->query("SELECT id, hospital_name as name FROM hospitals ORDER BY name");
$hospitals = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
// If hospitals table doesn't exist, we can proceed without it
if ($e->getCode() !== '42S02') {
$error_message = "Database error: " . $e->getMessage();
}
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
try {
$pdo = db();
// Ensure doctors table is up-to-date
$pdo->exec("CREATE TABLE IF NOT EXISTS doctors (
id INT AUTO_INCREMENT PRIMARY KEY,
hospital_id INT NULL,
full_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
specialty VARCHAR(255),
qualifications TEXT,
specialities TEXT,
contact_phone VARCHAR(255),
license_number VARCHAR(255),
cv_path VARCHAR(255),
license_upload_path VARCHAR(255),
consultation_fee DECIMAL(10, 2),
availability TEXT,
status VARCHAR(50) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (hospital_id) REFERENCES hospitals(id) ON DELETE SET NULL
)");
// Add hospital_id column if it doesn't exist (for backward compatibility)
$pdo->exec("ALTER TABLE `doctors` ADD COLUMN IF NOT EXISTS `hospital_id` INT NULL AFTER `id`, ADD INDEX (`hospital_id`);");
// File upload handling
$cv_path = null;
if (isset($_FILES['cv']) && $_FILES['cv']['error'] == UPLOAD_ERR_OK) {
$upload_dir = 'uploads/doctors/';
if (!is_dir($upload_dir)) mkdir($upload_dir, 0775, true);
$file_name = uniqid() . '-cv-' . basename($_FILES['cv']['name']);
$cv_path = $upload_dir . $file_name;
if (!move_uploaded_file($_FILES['cv']['tmp_name'], $cv_path)) {
throw new Exception("Failed to upload CV file.");
}
}
$license_upload_path = null;
if (isset($_FILES['licenseUpload']) && $_FILES['licenseUpload']['error'] == UPLOAD_ERR_OK) {
$upload_dir = 'uploads/doctors/';
if (!is_dir($upload_dir)) mkdir($upload_dir, 0775, true);
$file_name = uniqid() . '-license-' . basename($_FILES['licenseUpload']['name']);
$license_upload_path = $upload_dir . $file_name;
if (!move_uploaded_file($_FILES['licenseUpload']['tmp_name'], $license_upload_path)) {
throw new Exception("Failed to upload license file.");
}
}
// Hash password
$password_hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
$hospital_id = !empty($_POST['hospital_id']) ? $_POST['hospital_id'] : null;
// Insert data
$stmt = $pdo->prepare(
"INSERT INTO doctors (hospital_id, full_name, email, password, specialty, license_number, cv_path, license_upload_path, consultation_fee, availability, qualifications, specialities, contact_phone)
VALUES (:hospital_id, :full_name, :email, :password, :specialty, :license_number, :cv_path, :license_upload_path, :consultation_fee, :availability, :qualifications, :specialities, :contact_phone)"
);
$stmt->bindParam(':hospital_id', $hospital_id, PDO::PARAM_INT);
$stmt->bindParam(':full_name', $_POST['fullName']);
$stmt->bindParam(':email', $_POST['email']);
$stmt->bindParam(':password', $password_hash);
$stmt->bindParam(':specialty', $_POST['specialty']);
$stmt->bindParam(':license_number', $_POST['licenseNumber']);
$stmt->bindParam(':cv_path', $cv_path);
$stmt->bindParam(':license_upload_path', $license_upload_path);
$stmt->bindParam(':consultation_fee', $_POST['consultationFee']);
$stmt->bindParam(':availability', $_POST['availability']);
$stmt->bindParam(':qualifications', $_POST['qualifications']);
$stmt->bindParam(':specialities', $_POST['specialities']);
$stmt->bindParam(':contact_phone', $_POST['contact_phone']);
$stmt->execute();
$success_message = "Registration successful! Your profile will be reviewed shortly.";
} catch (PDOException $e) {
if ($e->getCode() == 23000) { // Integrity constraint violation (duplicate entry)
$error_message = "An account with this email address already exists.";
} else {
$error_message = "Database error: " . $e->getMessage();
}
} catch (Exception $e) {
$error_message = "An error occurred: " . $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Doctor Registration - Medicaltour</title>
<meta name="description" content="Doctor registration for Medicaltour.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css">
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
<div class="container">
<a class="navbar-brand" href="index.php">Medicaltour</a>
<div class="collapse navbar-collapse">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link" href="index.php">Home</a></li>
<li class="nav-item"><a class="nav-link" href="dashboard.php">Dashboard</a></li>
<li class="nav-item"><a class="nav-link" href="logout.php">Logout</a></li>
</ul>
</div>
</div>
</nav>
</header>
<main class="container mt-5 pt-5">
<div class="row">
<div class="col-md-8 mx-auto">
<h2 class="text-center mb-4">Doctor 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; ?>
<?php if (!$success_message): ?>
<p class="text-center mb-4">Join our network of trusted medical professionals.</p>
<form action="doctor-registration.php" method="post" enctype="multipart/form-data">
<div class="row">
<div class="col-md-6 mb-3">
<label for="fullName" class="form-label">Full Name</label>
<input type="text" class="form-control" id="fullName" name="fullName" required>
</div>
<div class="col-md-6 mb-3">
<label for="email" class="form-label">Email Address</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="col-md-6 mb-3">
<label for="specialty" class="form-label">Primary Specialty</label>
<input type="text" class="form-control" id="specialty" name="specialty" required>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="contact_phone" class="form-label">Contact Phone</label>
<input type="text" class="form-control" id="contact_phone" name="contact_phone">
</div>
<div class="col-md-6 mb-3">
<label for="licenseNumber" class="form-label">Medical License Number</label>
<input type="text" class="form-control" id="licenseNumber" name="licenseNumber" required>
</div>
</div>
<div class="mb-3">
<label for="qualifications" class="form-label">Qualifications</label>
<textarea class="form-control" id="qualifications" name="qualifications" rows="3" placeholder="e.g., MD, PhD, Board Certified in..."></textarea>
</div>
<div class="mb-3">
<label for="specialities" class="form-label">Additional Specialities</label>
<textarea class="form-control" id="specialities" name="specialities" rows="3" placeholder="e.g., Cardiology, Pediatrics, etc."></textarea>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="cv" class="form-label">CV/Resume Upload</label>
<input class="form-control" type="file" id="cv" name="cv">
</div>
<div class="col-md-6 mb-3">
<label for="licenseUpload" class="form-label">Medical License Upload</label>
<input class="form-control" type="file" id="licenseUpload" name="licenseUpload">
</div>
</div>
<div class="mb-3">
<label for="hospital_id" class="form-label">Affiliated Hospital (Optional)</label>
<select class="form-select" id="hospital_id" name="hospital_id">
<option value="">None</option>
<?php foreach ($hospitals as $hospital): ?>
<option value="<?php echo htmlspecialchars($hospital['id']); ?>">
<?php echo htmlspecialchars($hospital['name']); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label for="consultationFee" class="form-label">Consultation Fee (USD)</label>
<input type="number" class="form-control" id="consultationFee" name="consultationFee" min="0" step="1">
</div>
<div class="mb-3">
<label for="availability" class="form-label">Availability Schedule</label>
<textarea class="form-control" id="availability" name="availability" rows="3" placeholder="e.g., Mondays & Wednesdays, 9am - 5pm"></textarea>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Register</button>
</div>
</form>
<?php endif; ?>
</div>
</div>
</main>
<footer class="py-4 bg-dark text-white text-center mt-auto">
<div class="container">
<p>&copy; 2025 Medicaltour. All Rights Reserved.</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>