Error Password
Error Password
Here's the **complete code implementation** for all files in your school management system:
---
---
// Database Configuration
define('DB_HOST', 'localhost');
define('DB_NAME', 'school_db');
define('DB_USER', 'root');
define('DB_PASS', '');
define('BASE_URL', 'http://localhost/school-management-system/');
// Application Settings
define('SCHOOL_NAME', 'Sydney Williams Primary');
define('UPLOAD_DIR', __DIR__.'/../uploads/');
try {
$conn = new PDO(
"mysql:host=".DB_HOST.";dbname=".DB_NAME,
DB_USER,
DB_PASS,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
} catch(PDOException $e) {
die("Database connection failed: " . $e->getMessage());
}
// Security Headers
header("Content-Security-Policy: default-src 'self'");
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
```
---
if (!in_array($_SESSION['role'], $allowedRoles)) {
$_SESSION['error'] = "Unauthorized access!";
header("Location: " . BASE_URL . "index.php");
exit();
}
}
function generateCSRFToken() {
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
function validateCSRFToken($token) {
return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}
```
---
function getClassStudents($class_id) {
global $conn;
$stmt = $conn->prepare("SELECT * FROM students WHERE class_id = ?");
$stmt->execute([$class_id]);
return $stmt->fetchAll();
}
function logActivity($action) {
global $conn;
$stmt = $conn->prepare("INSERT INTO activity_log (user_id, action) VALUES (?, ?)");
$stmt->execute([$_SESSION['user_id'], $action]);
}
```
---
### **4. includes/db_setup.sql**
```sql
-- Create Database
CREATE DATABASE IF NOT EXISTS school_db;
USE school_db;
-- Users Table
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin','teacher','student') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Teachers Table
CREATE TABLE teachers (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT UNIQUE NOT NULL,
full_name VARCHAR(100) NOT NULL,
qualification VARCHAR(100),
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Students Table
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT UNIQUE NOT NULL,
full_name VARCHAR(100) NOT NULL,
date_of_birth DATE NOT NULL,
parent_email VARCHAR(100) NOT NULL,
class_id INT,
photo VARCHAR(255),
qr_code VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Classes Table
CREATE TABLE classes (
id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(50) NOT NULL,
teacher_id INT,
academic_year YEAR,
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
);
-- Insert Dummy Data (100 students, 10 teachers, 7 classes)
-- [Add similar INSERT statements for 100 students, 10 teachers, 7 classes]
```
---
// Fetch Statistics
$stats = [
'students' => $conn->query("SELECT COUNT(*) FROM students")->fetchColumn(),
'teachers' => $conn->query("SELECT COUNT(*) FROM teachers")->fetchColumn(),
'classes' => $conn->query("SELECT COUNT(*) FROM classes")->fetchColumn(),
'fees' => $conn->query("SELECT SUM(total_fees - paid_amount) FROM student_fees")-
>fetchColumn()
];
?>
<!DOCTYPE html>
<html>
<head>
<title>Admin Dashboard</title>
<link rel="stylesheet" href="../css/style.css">
</head>
<body>
<?php include '../includes/header.php'; ?>
<div class="dashboard-container">
<h1><?= SCHOOL_NAME ?> Admin Dashboard</h1>
<div class="stats-grid">
<div class="stat-card">
<h3>Students</h3>
<p><?= $stats['students'] ?></p>
</div>
<div class="stat-card">
<h3>Teachers</h3>
<p><?= $stats['teachers'] ?></p>
</div>
<div class="stat-card">
<h3>Classes</h3>
<p><?= $stats['classes'] ?></p>
</div>
<div class="stat-card">
<h3>Pending Fees</h3>
<p>R<?= number_format($stats['fees'], 2) ?></p>
</div>
</div>
<div class="quick-actions">
<a href="manage_students.php" class="btn">Manage Students</a>
<a href="manage_teachers.php" class="btn">Manage Teachers</a>
<a href="generate_reports.php" class="btn">Generate Reports</a>
</div>
</div>
---
$teacher_id = $_SESSION['user_id'];
// Fetch Students
$students = $conn->query("
SELECT s.*
FROM students s
WHERE s.class_id = {$teacher['class_id']}
")->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>
<title>Teacher Dashboard</title>
<link rel="stylesheet" href="../css/style.css">
</head>
<body>
<?php include '../includes/header.php'; ?>
<div class="dashboard-container">
<h1>Welcome, <?= $teacher['full_name'] ?></h1>
<h2>Class: <?= $teacher['class_name'] ?></h2>
<div class="class-stats">
<div class="stat-card">
<h3>Students</h3>
<p><?= count($students) ?></p>
</div>
</div>
<div class="student-list">
<h3>Student Roster</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Date of Birth</th>
<th>Parent Email</th>
</tr>
</thead>
<tbody>
<?php foreach ($students as $student): ?>
<tr>
<td><?= $student['full_name'] ?></td>
<td><?= date('d M Y', strtotime($student['date_of_birth'])) ?></td>
<td><?= $student['parent_email'] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
.dashboard-container {
max-width: 1200px;
margin: 20px auto;
padding: 20px;
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin: 20px 0;
}
.stat-card {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
text-align: center;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
th, td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.btn {
display: inline-block;
padding: 10px 20px;
background-color: #2c3e50;
color: white;
text-decoration: none;
border-radius: 4px;
margin: 5px;
}
```
---
1. **Create Database**:
```bash
mysql -u root -p < includes/db_setup.sql
```
2. **Install Dependencies**:
```bash
composer require mpdf/mpdf endroid/qr-code
```
3. **Directory Permissions**:
```bash
chmod 755 uploads
chmod 644 includes/config.php
```
4. **Access System**:
- Admin: `http://localhost/school-management-system/admin/dashboard.php`
- Teacher: `http://localhost/school-management-system/teachers/dashboard.php`
- Student: `http://localhost/school-management-system/students/dashboard.php`