Version 3

This commit is contained in:
Flatlogic Bot 2025-11-08 19:13:35 +00:00
parent 81ddc485b1
commit 2b636cf864
21 changed files with 931 additions and 13 deletions

41
admin/add_course.php Normal file
View File

@ -0,0 +1,41 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$description = $_POST['description'];
$pdo = db();
$stmt = $pdo->prepare("INSERT INTO courses (name, description) VALUES (?, ?)");
$stmt->execute([$name, $description]);
header("Location: courses.php");
exit;
}
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Add Course</h1>
<form method="post">
<div class="mb-3">
<label for="name" class="form-label">Course Name</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="description" class="form-label">Description</label>
<textarea class="form-control" id="description" name="description" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary">Add Course</button>
</form>
</div>
<?php require_once 'partials/footer.php'; ?>

41
admin/add_student.php Normal file
View File

@ -0,0 +1,41 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$pdo = db();
$stmt = $pdo->prepare("INSERT INTO students (username, password) VALUES (?, ?)");
$stmt->execute([$username, $password]);
header("Location: students.php");
exit;
}
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Add Student</h1>
<form method="post">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">Add Student</button>
</form>
</div>
<?php require_once 'partials/footer.php'; ?>

46
admin/courses.php Normal file
View File

@ -0,0 +1,46 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
require_once 'partials/header.php';
$pdo = db();
$stmt = $pdo->query("SELECT * FROM courses");
$courses = $stmt->fetchAll();
?>
<div class="container mt-5">
<h1>Manage Courses</h1>
<a href="add_course.php" class="btn btn-primary mb-3">Add Course</a>
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($courses as $course): ?>
<tr>
<td><?php echo htmlspecialchars($course['id']); ?></td>
<td><?php echo htmlspecialchars($course['name']); ?></td>
<td><?php echo htmlspecialchars($course['description']); ?></td>
<td>
<a href="edit_course.php?id=<?php echo $course['id']; ?>" class="btn btn-sm btn-warning">Edit</a>
<a href="delete_course.php?id=<?php echo $course['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Are you sure?')">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php require_once 'partials/footer.php'; ?>

33
admin/delete_course.php Normal file
View File

@ -0,0 +1,33 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$course_id = $_GET['id'];
$pdo = db();
// First, delete related enrollments and grades
$stmt = $pdo->prepare("SELECT id FROM enrollments WHERE course_id = ?");
$stmt->execute([$course_id]);
$enrollments = $stmt->fetchAll();
foreach ($enrollments as $enrollment) {
$stmt = $pdo->prepare("DELETE FROM grades WHERE enrollment_id = ?");
$stmt->execute([$enrollment['id']]);
}
$stmt = $pdo->prepare("DELETE FROM enrollments WHERE course_id = ?");
$stmt->execute([$course_id]);
// Now, delete the course
$stmt = $pdo->prepare("DELETE FROM courses WHERE id = ?");
$stmt->execute([$course_id]);
header("Location: courses.php");
exit;

33
admin/delete_student.php Normal file
View File

@ -0,0 +1,33 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$student_id = $_GET['id'];
$pdo = db();
// First, delete related enrollments and grades
$stmt = $pdo->prepare("SELECT id FROM enrollments WHERE student_id = ?");
$stmt->execute([$student_id]);
$enrollments = $stmt->fetchAll();
foreach ($enrollments as $enrollment) {
$stmt = $pdo->prepare("DELETE FROM grades WHERE enrollment_id = ?");
$stmt->execute([$enrollment['id']]);
}
$stmt = $pdo->prepare("DELETE FROM enrollments WHERE student_id = ?");
$stmt->execute([$student_id]);
// Now, delete the student
$stmt = $pdo->prepare("DELETE FROM students WHERE id = ?");
$stmt->execute([$student_id]);
header("Location: students.php");
exit;

47
admin/edit_course.php Normal file
View File

@ -0,0 +1,47 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$course_id = $_GET['id'];
$pdo = db();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$description = $_POST['description'];
$stmt = $pdo->prepare("UPDATE courses SET name = ?, description = ? WHERE id = ?");
$stmt->execute([$name, $description, $course_id]);
header("Location: courses.php");
exit;
}
$stmt = $pdo->prepare("SELECT * FROM courses WHERE id = ?");
$stmt->execute([$course_id]);
$course = $stmt->fetch();
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Edit Course</h1>
<form method="post">
<div class="mb-3">
<label for="name" class="form-label">Course Name</label>
<input type="text" class="form-control" id="name" name="name" value="<?php echo htmlspecialchars($course['name']); ?>" required>
</div>
<div class="mb-3">
<label for="description" class="form-label">Description</label>
<textarea class="form-control" id="description" name="description" rows="3"><?php echo htmlspecialchars($course['description']); ?></textarea>
</div>
<button type="submit" class="btn btn-primary">Update Course</button>
</form>
</div>
<?php require_once 'partials/footer.php'; ?>

58
admin/edit_student.php Normal file
View File

@ -0,0 +1,58 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$student_id = $_GET['id'];
$pdo = db();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$sql = "UPDATE students SET username = ?";
$params = [$username];
if (!empty($_POST['password'])) {
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$sql .= ", password = ?";
$params[] = $password;
}
$sql .= " WHERE id = ?";
$params[] = $student_id;
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
header("Location: students.php");
exit;
}
$stmt = $pdo->prepare("SELECT * FROM students WHERE id = ?");
$stmt->execute([$student_id]);
$student = $stmt->fetch();
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Edit Student</h1>
<form method="post">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username" value="<?php echo htmlspecialchars($student['username']); ?>" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">New Password (leave blank to keep current password)</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-primary">Update Student</button>
</form>
</div>
<?php require_once 'partials/footer.php'; ?>

106
admin/enrollments.php Normal file
View File

@ -0,0 +1,106 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$pdo = db();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$student_id = $_POST['student_id'];
$course_id = $_POST['course_id'];
// Check if enrollment already exists
$stmt = $pdo->prepare("SELECT id FROM enrollments WHERE student_id = ? AND course_id = ?");
$stmt->execute([$student_id, $course_id]);
if (!$stmt->fetch()) {
$stmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
$stmt->execute([$student_id, $course_id]);
}
header("Location: enrollments.php");
exit;
}
// Fetch all students and courses for dropdowns
$students_stmt = $pdo->query("SELECT * FROM students");
$students = $students_stmt->fetchAll();
$courses_stmt = $pdo->query("SELECT * FROM courses");
$courses = $courses_stmt->fetchAll();
// Fetch all enrollments with student and course names
$enrollments_stmt = $pdo->query("
SELECT e.id, s.username, c.name as course_name
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
ORDER BY s.username, c.name
");
$enrollments = $enrollments_stmt->fetchAll();
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Manage Enrollments</h1>
<div class="card mb-4">
<div class="card-header">Enroll Student in Course</div>
<div class="card-body">
<form method="post">
<div class="row">
<div class="col-md-5">
<label for="student_id" class="form-label">Student</label>
<select class="form-control" id="student_id" name="student_id" required>
<option value="">Select Student</option>
<?php foreach ($students as $student): ?>
<option value="<?php echo $student['id']; ?>"><?php echo htmlspecialchars($student['username']); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-5">
<label for="course_id" class="form-label">Course</label>
<select class="form-control" id="course_id" name="course_id" required>
<option value="">Select Course</option>
<?php foreach ($courses as $course): ?>
<option value="<?php echo $course['id']; ?>"><?php echo htmlspecialchars($course['name']); ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="submit" class="btn btn-primary w-100">Enroll</button>
</div>
</div>
</form>
</div>
</div>
<h2>Current Enrollments</h2>
<table class="table table-bordered">
<thead>
<tr>
<th>Student</th>
<th>Course</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($enrollments as $enrollment): ?>
<tr>
<td><?php echo htmlspecialchars($enrollment['username']); ?></td>
<td><?php echo htmlspecialchars($enrollment['course_name']); ?></td>
<td>
<a href="unenroll.php?id=<?php echo $enrollment['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Are you sure?')">Unenroll</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php require_once 'partials/footer.php'; ?>

84
admin/grades.php Normal file
View File

@ -0,0 +1,84 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$pdo = db();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$enrollment_id = $_POST['enrollment_id'];
$grade = $_POST['grade'];
// Check if a grade already exists
$stmt = $pdo->prepare("SELECT id FROM grades WHERE enrollment_id = ?");
$stmt->execute([$enrollment_id]);
$existing_grade = $stmt->fetch();
if ($existing_grade) {
// Update existing grade
$stmt = $pdo->prepare("UPDATE grades SET grade = ? WHERE id = ?");
$stmt->execute([$grade, $existing_grade['id']]);
} else {
// Insert new grade
$stmt = $pdo->prepare("INSERT INTO grades (enrollment_id, grade) VALUES (?, ?)");
$stmt->execute([$enrollment_id, $grade]);
}
header("Location: grades.php");
exit;
}
// Fetch all enrollments with student, course, and grade information
$enrollments_stmt = $pdo->query("
SELECT e.id, s.username, c.name as course_name, g.grade
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
LEFT JOIN grades g ON e.id = g.enrollment_id
ORDER BY s.username, c.name
");
$enrollments = $enrollments_stmt->fetchAll();
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Manage Grades</h1>
<table class="table table-bordered">
<thead>
<tr>
<th>Student</th>
<th>Course</th>
<th>Grade</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($enrollments as $enrollment): ?>
<tr>
<td><?php echo htmlspecialchars($enrollment['username']); ?></td>
<td><?php echo htmlspecialchars($enrollment['course_name']); ?></td>
<td>
<form method="post" class="row g-2">
<input type="hidden" name="enrollment_id" value="<?php echo $enrollment['id']; ?>">
<div class="col-auto">
<input type="text" class="form-control" name="grade" value="<?php echo htmlspecialchars($enrollment['grade'] ?? ''); ?>" placeholder="Enter grade">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary">Save</button>
</div>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php require_once 'partials/footer.php'; ?>

18
admin/index.php Normal file
View File

@ -0,0 +1,18 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once 'partials/header.php';
?>
<div class="container mt-5">
<h1>Admin Dashboard</h1>
<p>Welcome, <?php echo htmlspecialchars($_SESSION['admin_username']); ?>!</p>
<p>This is the admin dashboard. From here you can manage students, courses, enrollments, and grades.</p>
</div>
<?php require_once 'partials/footer.php'; ?>

64
admin/login.php Normal file
View File

@ -0,0 +1,64 @@
<?php
session_start();
require_once '../db/config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
$pdo = db();
$stmt = $pdo->prepare("SELECT * FROM admins WHERE username = ?");
$stmt->execute([$username]);
$admin = $stmt->fetch();
if ($admin && password_verify($password, $admin['password'])) {
$_SESSION['admin_logged_in'] = true;
$_SESSION['admin_id'] = $admin['id'];
$_SESSION['admin_username'] = $admin['username'];
header("Location: index.php");
exit;
} else {
$error = "Invalid credentials";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Login</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">
Admin Login
</div>
<div class="card-body">
<?php if (isset($error)): ?>
<div class="alert alert-danger"><?php echo $error; ?></div>
<?php endif; ?>
<form method="post">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

6
admin/logout.php Normal file
View File

@ -0,0 +1,6 @@
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;

View File

@ -0,0 +1,3 @@
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

42
admin/partials/header.php Normal file
View File

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Panel</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="index.php">Admin Panel</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="index.php">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link" href="students.php">Students</a>
</li>
<li class="nav-item">
<a class="nav-link" href="courses.php">Courses</a>
</li>
<li class="nav-item">
<a class="nav-link" href="enrollments.php">Enrollments</a>
</li>
<li class="nav-item">
<a class="nav-link" href="grades.php">Grades</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="logout.php">Logout</a>
</li>
</ul>
</div>
</div>
</nav>

44
admin/students.php Normal file
View File

@ -0,0 +1,44 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
require_once 'partials/header.php';
$pdo = db();
$stmt = $pdo->query("SELECT * FROM students");
$students = $stmt->fetchAll();
?>
<div class="container mt-5">
<h1>Manage Students</h1>
<a href="add_student.php" class="btn btn-primary mb-3">Add Student</a>
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Username</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($students as $student): ?>
<tr>
<td><?php echo htmlspecialchars($student['id']); ?></td>
<td><?php echo htmlspecialchars($student['username']); ?></td>
<td>
<a href="edit_student.php?id=<?php echo $student['id']; ?>" class="btn btn-sm btn-warning">Edit</a>
<a href="delete_student.php?id=<?php echo $student['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Are you sure?')">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php require_once 'partials/footer.php'; ?>

24
admin/unenroll.php Normal file
View File

@ -0,0 +1,24 @@
<?php
session_start();
if (!isset($_SESSION['admin_logged_in']) || $_SESSION['admin_logged_in'] !== true) {
header("Location: login.php");
exit;
}
require_once '../db/config.php';
$enrollment_id = $_GET['id'];
$pdo = db();
// First, delete any related grades
$stmt = $pdo->prepare("DELETE FROM grades WHERE enrollment_id = ?");
$stmt->execute([$enrollment_id]);
// Now, delete the enrollment
$stmt = $pdo->prepare("DELETE FROM enrollments WHERE id = ?");
$stmt->execute([$enrollment_id]);
header("Location: enrollments.php");
exit;

View File

@ -1,11 +1,32 @@
<?php
session_start();
require_once 'db/config.php';
// If user is not logged in, redirect to login page
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
header('Location: login.php');
exit;
}
// Fetch student's courses
$courses = [];
try {
$pdo = db();
$stmt = $pdo->prepare("
SELECT c.name, c.description, g.grade
FROM courses c
JOIN enrollments e ON c.id = e.course_id
JOIN students s ON e.student_id = s.id
LEFT JOIN grades g ON e.id = g.enrollment_id
WHERE s.username = ?
");
$stmt->execute([$_SESSION['username']]);
$courses = $stmt->fetchAll();
} catch (PDOException $e) {
// Handle database error
error_log($e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="en">
@ -52,8 +73,23 @@ if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
<h4>Enrolled Courses</h4>
</div>
<div class="card-body">
<p>Course information will be displayed here soon.</p>
<!-- Example course list can be added later -->
<?php if (!empty($courses)): ?>
<ul class="list-group list-group-flush">
<?php foreach ($courses as $course): ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<div>
<h5><?php echo htmlspecialchars($course['name']); ?></h5>
<p><?php echo htmlspecialchars($course['description']); ?></p>
</div>
<div>
<strong>Grade:</strong> <?php echo htmlspecialchars($course['grade'] ?? 'Not graded'); ?>
</div>
</li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>You are not enrolled in any courses yet.</p>
<?php endif; ?>
</div>
</div>
</div>
@ -63,7 +99,8 @@ if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
<h4>Profile</h4>
</div>
<div class="card-body">
<p>Student profile details will appear here.</p>
<p>View and edit your profile information.</p>
<a href="profile.php" class="btn btn-primary">Go to Profile</a>
</div>
</div>
</div>

109
db/setup_database.php Normal file
View File

@ -0,0 +1,109 @@
<?php
require_once __DIR__ . '/config.php';
try {
$pdo = db();
// Create students table
$pdo->exec("
CREATE TABLE IF NOT EXISTS students (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
)
");
// Create courses table
$pdo->exec("
CREATE TABLE IF NOT EXISTS courses (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT
)
");
// Create enrollments table
$pdo->exec("
CREATE TABLE IF NOT EXISTS enrollments (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
course_id INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
)
");
// Add a student
$username = 'student';
$password = password_hash('password123', PASSWORD_DEFAULT);
$stmt = $pdo->prepare("SELECT id FROM students WHERE username = ?");
$stmt->execute([$username]);
$student = $stmt->fetch();
if (!$student) {
$stmt = $pdo->prepare("INSERT INTO students (username, password) VALUES (?, ?)");
$stmt->execute([$username, $password]);
$student_id = $pdo->lastInsertId();
} else {
$student_id = $student['id'];
}
// Add courses
$courses = [
['Introduction to PHP', 'Learn the basics of PHP programming.'],
['Database Management with MySQL', 'Master the art of database management.'],
['Web Design Fundamentals', 'Understand the principles of modern web design.'],
];
$stmt = $pdo->prepare("INSERT INTO courses (name, description) VALUES (?, ?)");
foreach ($courses as $course) {
// Check if course exists
$checkStmt = $pdo->prepare("SELECT id FROM courses WHERE name = ?");
$checkStmt->execute([$course[0]]);
if (!$checkStmt->fetch()) {
$stmt->execute($course);
$course_id = $pdo->lastInsertId();
// Enroll student in the course
$enrollStmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
$enrollStmt->execute([$student_id, $course_id]);
}
}
// Create admins table
$pdo->exec("
CREATE TABLE IF NOT EXISTS admins (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
)
");
// Add an admin
$admin_username = 'admin';
$admin_password = password_hash('password123', PASSWORD_DEFAULT);
$stmt = $pdo->prepare("SELECT id FROM admins WHERE username = ?");
$stmt->execute([$admin_username]);
if (!$stmt->fetch()) {
$stmt = $pdo->prepare("INSERT INTO admins (username, password) VALUES (?, ?)");
$stmt->execute([$admin_username, $admin_password]);
}
// Create grades table
$pdo->exec("
CREATE TABLE IF NOT EXISTS grades (
id INT AUTO_INCREMENT PRIMARY KEY,
enrollment_id INT NOT NULL,
grade VARCHAR(255),
FOREIGN KEY (enrollment_id) REFERENCES enrollments(id)
)
");
echo "Database setup completed successfully.\n";
} catch (PDOException $e) {
die("Database error: " . $e->getMessage());
}

View File

@ -37,6 +37,7 @@
<li class="nav-item"><a class="nav-link" href="#about">About</a></li>
<li class="nav-item"><a class="nav-link" href="#contact">Contact</a></li>
<li class="nav-item"><a class="btn btn-primary ms-lg-2" href="login.php">Student Login</a></li>
<li class="nav-item"><a class="btn btn-secondary ms-lg-2" href="admin/login.php">Admin Login</a></li>
</ul>
</div>
</div>

View File

@ -1,5 +1,6 @@
<?php
session_start();
require_once 'db/config.php';
// If user is already logged in, redirect to dashboard
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
@ -7,23 +8,34 @@ if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
exit;
}
// Hardcoded credentials
define('USERNAME', 'student');
define('PASSWORD', 'password123');
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if ($username === USERNAME && $password === PASSWORD) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
header('Location: dashboard.php');
exit;
if (empty($username) || empty($password)) {
$error = 'Please enter both username and password.';
} else {
$error = 'Invalid username or password.';
try {
$pdo = db();
$stmt = $pdo->prepare("SELECT * FROM students WHERE username = ?");
$stmt->execute([$username]);
$student = $stmt->fetch();
if ($student && password_verify($password, $student['password'])) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $student['username'];
$_SESSION['student_id'] = $student['id'];
header('Location: dashboard.php');
exit;
} else {
$error = 'Invalid username or password.';
}
} catch (PDOException $e) {
$error = 'Database error. Please try again later.';
error_log($e->getMessage());
}
}
}
?>

69
profile.php Normal file
View File

@ -0,0 +1,69 @@
<?php
session_start();
require_once 'db/config.php';
// If user is not logged in, redirect to login page
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
header('Location: login.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Profile - University Management</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="dashboard.php">University Portal</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="dashboard.php">Dashboard</a>
</li>
<li class="nav-item">
<span class="navbar-text me-3">
Welcome, <?php echo htmlspecialchars($_SESSION['username']); ?>!
</span>
</li>
<li class="nav-item">
<a class="btn btn-outline-primary" href="logout.php">Logout</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-5">
<div class="row">
<div class="col-12">
<h1 class="display-5">My Profile</h1>
</div>
</div>
<div class="row mt-4">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h4>Profile Information</h4>
</div>
<div class="card-body">
<p><strong>Username:</strong> <?php echo htmlspecialchars($_SESSION['username']); ?></p>
<!-- More profile information can be added here in the future -->
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>