<?php
session_start();
require_once '../config/database.php';
// Check if user is logged in and is admin
if (!isset($_SESSION['user_id']) || ($_SESSION['role'] !== 'admin' && $_SESSION['role'] !== 'director')) {
header('Location: login.php');
exit();
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$student_id = (int)$_POST['student_id'];
$username = trim($_POST['username'] ?? '');
$email = trim($_POST['email'] ?? '');
$password = $_POST['password'] ?? '';
$first_name = trim($_POST['first_name'] ?? '');
$last_name = trim($_POST['last_name'] ?? '');
$status = $_POST['status'] ?? 'active';
$errors = [];
// Validate username
if (empty($username)) {
$errors[] = "Username is required";
} elseif (strlen($username) < 3) {
$errors[] = "Username must be at least 3 characters long";
} elseif (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
$errors[] = "Username can only contain letters, numbers, and underscores";
}
// Validate email
if (empty($email)) {
$errors[] = "Email is required";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Invalid email format";
}
// Validate status
if (!in_array($status, ['active', 'inactive'])) {
$errors[] = "Invalid status";
}
// Check if username exists (excluding current student)
if (empty($errors)) {
$stmt = $conn->prepare("SELECT id FROM users WHERE username = ? AND id != ?");
$stmt->bind_param("si", $username, $student_id);
$stmt->execute();
if ($stmt->get_result()->num_rows > 0) {
$errors[] = "Username already exists";
}
}
// Check if email exists (excluding current student)
if (empty($errors)) {
$stmt = $conn->prepare("SELECT id FROM users WHERE email = ? AND id != ?");
$stmt->bind_param("si", $email, $student_id);
$stmt->execute();
if ($stmt->get_result()->num_rows > 0) {
$errors[] = "Email already exists";
}
}
// Validate password if provided
if (!empty($password) && strlen($password) < 6) {
$errors[] = "Password must be at least 6 characters long";
}
if (empty($errors)) {
if (!empty($password)) {
// Update with new password
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$stmt = $conn->prepare("
UPDATE users
SET username = ?, email = ?, password = ?, first_name = ?, last_name = ?, status = ?
WHERE id = ? AND role = 'student'
");
$stmt->bind_param("ssssssi", $username, $email, $hashed_password, $first_name, $last_name, $status, $student_id);
} else {
// Update without changing password
$stmt = $conn->prepare("
UPDATE users
SET username = ?, email = ?, first_name = ?, last_name = ?, status = ?
WHERE id = ? AND role = 'student'
");
$stmt->bind_param("sssssi", $username, $email, $first_name, $last_name, $status, $student_id);
}
if ($stmt->execute()) {
if ($stmt->affected_rows > 0) {
$_SESSION['success_message'] = "Student updated successfully";
} else {
$_SESSION['error_message'] = "No changes were made or student not found";
}
} else {
$_SESSION['error_message'] = "Error updating student: " . $conn->error;
}
} else {
$_SESSION['error_message'] = implode("<br>", $errors);
}
}
header('Location: students.php');
exit();