School Management System Project With Source Code In Php Apr 2026
if (mysqli_num_rows($result) == 1) { $user = mysqli_fetch_assoc($result); if (password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; $_SESSION['role'] = $user['role']; $_SESSION['related_id'] = $user['related_id']; switch ($user['role']) { case 'admin': header("Location: admin/dashboard.php"); break; case 'teacher': header("Location: teacher/dashboard.php"); break; case 'student': header("Location: student/dashboard.php"); break; } } else { $error = "Invalid password"; } } else { $error = "User not found"; } } ?> <!-- HTML Form --> <form method="POST"> <input type="text" name="username" required> <input type="password" name="password" required> <button type="submit">Login</button> <?php if(isset($error)) echo "<p>$error</p>"; ?> </form> <?php require_once '../config/db_connection.php'; require_once '../includes/auth.php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $roll_no = $_POST['roll_no']; $class_id = $_POST['class_id']; $section = $_POST['section']; $parent_mobile = $_POST['parent_mobile']; $address = $_POST['address']; $dob = $_POST['dob']; $admission_date = $_POST['admission_date'];
// Fetch classes for dropdown $classes = mysqli_query($conn, "SELECT * FROM classes"); ?> <!-- HTML form for adding student --> <?php require_once '../config/db_connection.php'; require_once '../includes/auth.php'; $teacher_id = $_SESSION['related_id']; $class_id = $_GET['class_id'] ?? null; $date = date('Y-m-d'); school management system project with source code in php
CREATE DATABASE school_management; USE school_management; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, role ENUM('admin', 'teacher', 'student', 'parent') NOT NULL, related_id INT NOT NULL, -- student_id or teacher_id created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); Table: students CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, roll_no VARCHAR(20) UNIQUE, class_id INT, section VARCHAR(10), parent_mobile VARCHAR(15), address TEXT, dob DATE, admission_date DATE ); Table: teachers CREATE TABLE teachers ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, mobile VARCHAR(15), qualification VARCHAR(100), address TEXT ); Table: classes CREATE TABLE classes ( id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(20) NOT NULL, -- e.g., 1, 2, 3, etc. numeric_name INT ); Table: subjects CREATE TABLE subjects ( id INT AUTO_INCREMENT PRIMARY KEY, subject_name VARCHAR(50) NOT NULL, class_id INT, teacher_id INT, FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE, FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE SET NULL ); Table: attendance CREATE TABLE attendance ( id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, class_id INT, date DATE, status ENUM('present', 'absent', 'late') DEFAULT 'absent', FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE, FOREIGN KEY (class_id) REFERENCES classes(id) ); Table: marks CREATE TABLE marks ( id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, subject_id INT, exam_type ENUM('FA1', 'FA2', 'SA1', 'SA2') NOT NULL, marks_obtained INT, max_marks INT DEFAULT 100, FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (subject_id) REFERENCES subjects(id) ); Table: fees CREATE TABLE fees ( id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, amount_due DECIMAL(10,2), amount_paid DECIMAL(10,2), due_date DATE, payment_date DATE, status ENUM('paid', 'pending', 'partial'), FOREIGN KEY (student_id) REFERENCES students(id) ); 4. Project Structure school-management/ │ ├── config/ │ └── db_connection.php ├── includes/ │ ├── header.php │ ├── footer.php │ └── auth.php ├── assets/ │ ├── css/ │ ├── js/ │ └── images/ ├── admin/ │ ├── dashboard.php │ ├── manage_students.php │ ├── manage_teachers.php │ ├── manage_classes.php │ ├── manage_subjects.php │ └── fee_report.php ├── teacher/ │ ├── dashboard.php │ ├── attendance.php │ ├── marks_entry.php │ └── my_classes.php ├── student/ │ └── dashboard.php ├── login.php ├── logout.php └── index.php 5. Core Source Code 5.1 Database Connection ( config/db_connection.php ) <?php $host = 'localhost'; $user = 'root'; $password = ''; $database = 'school_management'; $conn = mysqli_connect($host, $user, $password, $database); ?php $host = 'localhost'
$query = "INSERT INTO students (first_name, last_name, roll_no, class_id, section, parent_mobile, address, dob, admission_date) VALUES ('$first_name', '$last_name', '$roll_no', $class_id, '$section', '$parent_mobile', '$address', '$dob', '$admission_date')"; $user = 'root'