prepare("SELECT * FROM students WHERE id = ?");
$stmt->execute([$student_id]);
$student = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$student) {
// Optional: Show a "not found" message or redirect
header("Location: index.php?error=not_found");
exit();
}
// -- Behavior Insights Logic --
// 2.1. Create behaviors table if it doesn't exist and add rating column
$pdo->exec("CREATE TABLE IF NOT EXISTS behaviors (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
behavior_description TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
);");
try {
$pdo->exec("ALTER TABLE behaviors ADD COLUMN rating INT NOT NULL DEFAULT 5");
} catch (PDOException $e) {
// Ignore errors, especially if the column already exists.
}
// 2.2. Handle form submission for adding a new behavior
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_behavior') {
$behavior_description = trim($_POST['behavior_description'] ?? '');
$behavior_rating = isset($_POST['behavior_rating']) ? (int)$_POST['behavior_rating'] : 5;
if (!empty($behavior_description)) {
$stmt = $pdo->prepare("INSERT INTO behaviors (student_id, behavior_description, rating) VALUES (?, ?, ?)");
$stmt->execute([$student_id, $behavior_description, $behavior_rating]);
// Redirect to the same page to prevent form resubmission
header("Location: student.php?id=" . $student_id . "&success=behavior_logged");
exit();
}
}
// 2.3. Handle form submission for editing a behavior
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'edit_behavior') {
$behavior_id = isset($_POST['behavior_id']) ? (int)$_POST['behavior_id'] : 0;
$behavior_description = trim($_POST['behavior_description'] ?? '');
$behavior_rating = isset($_POST['behavior_rating']) ? (int)$_POST['behavior_rating'] : 5;
if ($behavior_id && !empty($behavior_description)) {
$stmt = $pdo->prepare("UPDATE behaviors SET behavior_description = ?, rating = ? WHERE id = ? AND student_id = ?");
$stmt->execute([$behavior_description, $behavior_rating, $behavior_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=behavior_updated");
exit();
}
}
// 2.3. Handle form submission for deleting a behavior
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'delete_behavior') {
$behavior_id = isset($_POST['behavior_id']) ? (int)$_POST['behavior_id'] : 0;
if ($behavior_id) {
$stmt = $pdo->prepare("DELETE FROM behaviors WHERE id = ? AND student_id = ?");
$stmt->execute([$behavior_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=behavior_deleted");
exit();
}
}
// 2.4. Fetch all behaviors for this student
$stmt = $pdo->prepare("SELECT * FROM behaviors WHERE student_id = ? ORDER BY created_at DESC");
$stmt->execute([$student_id]);
$behaviors = $stmt->fetchAll(PDO::FETCH_ASSOC);
// -- Academic Insights Logic --
// 2.4. Create academics table if it doesn't exist
$pdo->exec("CREATE TABLE IF NOT EXISTS academics (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
subject VARCHAR(100) NOT NULL,
grade VARCHAR(2) NOT NULL,
comments TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
);");
// 2.5. Handle form submission for adding a new academic record
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_academic') {
$subject = trim($_POST['subject'] ?? '');
$grade = trim($_POST['grade'] ?? '');
$comments = trim($_POST['comments'] ?? '');
if (!empty($subject) && !empty($grade)) {
$stmt = $pdo->prepare("INSERT INTO academics (student_id, subject, grade, comments) VALUES (?, ?, ?, ?)");
$stmt->execute([$student_id, $subject, $grade, $comments]);
header("Location: student.php?id=" . $student_id . "&success=academic_logged");
exit();
}
}
// Handle form submission for editing an academic record
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'edit_academic') {
$academic_id = isset($_POST['academic_id']) ? (int)$_POST['academic_id'] : 0;
$subject = trim($_POST['subject'] ?? '');
$grade = trim($_POST['grade'] ?? '');
$comments = trim($_POST['comments'] ?? '');
if ($academic_id && !empty($subject) && !empty($grade)) {
$stmt = $pdo->prepare("UPDATE academics SET subject = ?, grade = ?, comments = ? WHERE id = ? AND student_id = ?");
$stmt->execute([$subject, $grade, $comments, $academic_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=academic_updated");
exit();
}
}
// Handle form submission for deleting an academic record
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'delete_academic') {
$academic_id = isset($_POST['academic_id']) ? (int)$_POST['academic_id'] : 0;
if ($academic_id) {
$stmt = $pdo->prepare("DELETE FROM academics WHERE id = ? AND student_id = ?");
$stmt->execute([$academic_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=academic_deleted");
exit();
}
}
// 2.6. Fetch all academic records for this student
$stmt = $pdo->prepare("SELECT * FROM academics WHERE student_id = ? ORDER BY created_at DESC");
$stmt->execute([$student_id]);
$academics = $stmt->fetchAll(PDO::FETCH_ASSOC);
// -- Student Details Logic --
// Create student_details table
$pdo->exec("CREATE TABLE IF NOT EXISTS student_details (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
details TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
);")
// Fetch all details for this student
$stmt = $pdo->prepare("SELECT * FROM student_details WHERE student_id = ? ORDER BY created_at DESC");
$stmt->execute([$student_id]);
$student_details = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Handle form submission for adding a new student detail
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_student_detail') {
$title = trim($_POST['detail_title'] ?? '');
$details = trim($_POST['detail_content'] ?? '');
if (!empty($title)) {
$stmt = $pdo->prepare("INSERT INTO student_details (student_id, title, details) VALUES (?, ?, ?)");
$stmt->execute([$student_id, $title, $details]);
header("Location: student.php?id=" . $student_id . "&success=detail_added");
exit();
}
}
// Handle form submission for deleting a student detail
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'delete_student_detail') {
$detail_id = isset($_POST['detail_id']) ? (int)$_POST['detail_id'] : 0;
if ($detail_id) {
$stmt = $pdo->prepare("DELETE FROM student_details WHERE id = ? AND student_id = ?");
$stmt->execute([$detail_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=detail_deleted");
exit();
}
}
// Handle form submission for editing a student detail
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'edit_student_detail') {
$detail_id = isset($_POST['detail_id']) ? (int)$_POST['detail_id'] : 0;
$title = trim($_POST['detail_title'] ?? '');
$details = trim($_POST['detail_content'] ?? '');
if ($detail_id && !empty($title)) {
$stmt = $pdo->prepare("UPDATE student_details SET title = ?, details = ? WHERE id = ? AND student_id = ?");
$stmt->execute([$title, $details, $detail_id, $student_id]);
header("Location: student.php?id=" . $student_id . "&success=detail_updated");
exit();
}
}
} catch (PDOException $e) {
// For development, you might want to log this error.
// For production, show a generic error message.
die("Database error: Could not retrieve student data.");
}
$pageTitle = htmlspecialchars($student['first_name'] . ' ' . $student['last_name']);
?>
- Student Details
Behavior Insights
Behavior History
No behavior entries have been logged for this student yet.
Academic Insights
Log New Academic Record
Academic History
No academic records have been logged for this student yet.
| Subject |
Grade |
Comments |
Date |
Actions |
|
|
|
|
|
Additional Student Details
Add New Detail
Details History
No additional details have been logged for this student yet.
| Title |
Details |
Date |
Actions |
|
|
|
|
New behavior logged successfully!
New academic record logged successfully!