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']); ?> <?php echo $pageTitle; ?> - Student Details

Student Profile

First Name:

Last Name:

Date of Birth:

Admission Date:

Behavior Insights

Log New Behavior

Behavior History

No behavior entries have been logged for this student yet.

  • Logged on:
    Rating:

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