Compare commits

..

2 Commits

Author SHA1 Message Date
Flatlogic Bot
2b636cf864 Version 3 2025-11-08 19:13:35 +00:00
Flatlogic Bot
81ddc485b1 Version 1 2025-11-08 19:01:31 +00:00
25 changed files with 1277 additions and 145 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;

75
assets/css/custom.css Normal file
View File

@ -0,0 +1,75 @@
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
background-color: #F8F9FA;
}
h1, h2, h3, h4, h5, h6 {
font-family: Georgia, 'Times New Roman', Times, serif;
}
.hero {
background: linear-gradient(45deg, #005A9C, #003B64);
color: white;
padding: 6rem 1rem;
text-align: center;
}
.hero h1 {
font-size: 3.5rem;
font-weight: bold;
}
.hero p {
font-size: 1.25rem;
margin-bottom: 2rem;
}
.btn-gold {
background-color: #FDB813;
border-color: #FDB813;
color: #212529;
font-weight: bold;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
transition: background-color 0.3s ease;
}
.btn-gold:hover {
background-color: #e0a800;
border-color: #e0a800;
}
.course-card {
border: none;
border-radius: 0.5rem;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.course-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 16px rgba(0,0,0,0.15);
}
.course-card .card-header {
background-color: #005A9C;
color: white;
font-weight: bold;
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
}
.footer {
background-color: #343A40;
color: white;
padding: 2rem 0;
}
.footer a {
color: #FDB813;
}
.footer a:hover {
color: #e0a800;
}

13
assets/js/main.js Normal file
View File

@ -0,0 +1,13 @@
document.addEventListener('DOMContentLoaded', function () {
// Smooth scroll for navigation links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

112
dashboard.php Normal file
View File

@ -0,0 +1,112 @@
<?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">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard - 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="#">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">
<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 Dashboard</h1>
<p class="lead">Here you can find your enrolled courses, grades, and profile information.</p>
</div>
</div>
<div class="row mt-4">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h4>Enrolled Courses</h4>
</div>
<div class="card-body">
<?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>
<div class="col-md-4">
<div class="card">
<div class="card-header">
<h4>Profile</h4>
</div>
<div class="card-body">
<p>View and edit your profile information.</p>
<a href="profile.php" class="btn btn-primary">Go to Profile</a>
</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>

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());
}

253
index.php
View File

@ -1,150 +1,123 @@
<?php <!DOCTYPE html>
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
@date_default_timezone_set('UTC');
$phpVersion = PHP_VERSION;
$now = date('Y-m-d H:i:s');
?>
<!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Style</title> <title>University of Tomorrow | UMS</title>
<?php <meta name="description" content="A comprehensive, modern, and intelligent University Management System (UMS) web application designed for academic institutions.">
// Read project preview data from environment <meta name="keywords" content="university management, student information system, course management, faculty portal, student portal, academic records, enrollment system, university ERP, higher education, Built with Flatlogic Generator">
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? ''; <meta property="og:title" content="University of Tomorrow | UMS">
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; <meta property="og:description" content="A comprehensive, modern, and intelligent University Management System (UMS) web application designed for academic institutions.">
?> <meta property="og:image" content="">
<?php if ($projectDescription): ?> <meta name="twitter:card" content="summary_large_image">
<!-- Meta description --> <meta name="twitter:image" content="">
<meta name="description" content='<?= htmlspecialchars($projectDescription) ?>' />
<!-- Open Graph meta tags --> <!-- Bootstrap 5 CDN -->
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Twitter meta tags --> <!-- Bootstrap Icons CDN -->
<meta property="twitter:description" content="<?= htmlspecialchars($projectDescription) ?>" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<?php endif; ?> <!-- Custom CSS -->
<?php if ($projectImageUrl): ?> <link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
<!-- Open Graph image -->
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<!-- Twitter image -->
<meta property="twitter:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<?php endif; ?>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color-start: #6a11cb;
--bg-color-end: #2575fc;
--text-color: #ffffff;
--card-bg-color: rgba(255, 255, 255, 0.01);
--card-border-color: rgba(255, 255, 255, 0.1);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
overflow: hidden;
position: relative;
}
body::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
animation: bg-pan 20s linear infinite;
z-index: -1;
}
@keyframes bg-pan {
0% { background-position: 0% 0%; }
100% { background-position: 100% 100%; }
}
main {
padding: 2rem;
}
.card {
background: var(--card-bg-color);
border: 1px solid var(--card-border-color);
border-radius: 16px;
padding: 2rem;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
}
.loader {
margin: 1.25rem auto 1.25rem;
width: 48px;
height: 48px;
border: 3px solid rgba(255, 255, 255, 0.25);
border-top-color: #fff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.hint {
opacity: 0.9;
}
.sr-only {
position: absolute;
width: 1px; height: 1px;
padding: 0; margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap; border: 0;
}
h1 {
font-size: 3rem;
font-weight: 700;
margin: 0 0 1rem;
letter-spacing: -1px;
}
p {
margin: 0.5rem 0;
font-size: 1.1rem;
}
code {
background: rgba(0,0,0,0.2);
padding: 2px 6px;
border-radius: 4px;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
footer {
position: absolute;
bottom: 1rem;
font-size: 0.8rem;
opacity: 0.7;
}
</style>
</head> </head>
<body> <body>
<main>
<div class="card"> <!-- Header -->
<h1>Analyzing your requirements and generating your website…</h1> <nav class="navbar navbar-expand-lg navbar-light bg-white shadow-sm sticky-top">
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes"> <div class="container">
<span class="sr-only">Loading…</span> <a class="navbar-brand" href="#" style="color: #005A9C; font-weight: bold; font-family: Georgia, serif;">
<i class="bi bi-building"></i> University of Tomorrow
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<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="#">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#courses">Courses</a></li>
<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>
<p class="hint"><?= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWizzy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.</p>
<p class="hint">This page will update automatically as the plan is implemented.</p>
<p>Runtime: PHP <code><?= htmlspecialchars($phpVersion) ?></code> — UTC <code><?= htmlspecialchars($now) ?></code></p>
</div> </div>
</nav>
<!-- Hero Section -->
<header class="hero">
<div class="container">
<h1>Welcome to the University of Tomorrow</h1>
<p>Shaping the future of education with cutting-edge technology and world-class faculty.</p>
<a href="#courses" class="btn btn-gold">Explore Our Courses</a>
</div>
</header>
<!-- Main Content -->
<main class="container my-5">
<!-- Courses Section -->
<section id="courses" class="py-5">
<h2 class="text-center mb-5">Course Catalog</h2>
<?php
$courses = [
['code' => 'CS101', 'name' => 'Introduction to Computer Science', 'description' => 'Explore the fundamental concepts of programming, algorithms, and data structures.'],
['code' => 'PHY201', 'name' => 'Quantum Physics I', 'description' => 'Delve into the strange and fascinating world of quantum mechanics and its principles.'],
['code' => 'HIS340', 'name' => 'History of the Digital Age', 'description' => 'A survey of the technological and social history of computing and the internet.'],
['code' => 'ART110', 'name' => 'Digital Art & Design', 'description' => 'Learn the tools and techniques for creating stunning visual art in a digital medium.'],
['code' => 'BUS450', 'name' => 'Strategic Management', 'description' => 'Understand the frameworks for analyzing business strategy and competitive advantage.'],
['code' => 'LIT220', 'name' => 'Science Fiction Literature', 'description' => 'Analyze classic and contemporary works of science fiction and their cultural impact.'],
];
?>
<div class="row g-4">
<?php foreach ($courses as $course): ?>
<div class="col-md-6 col-lg-4">
<div class="card h-100 course-card">
<div class="card-header">
<?php echo htmlspecialchars($course['code']); ?>
</div>
<div class="card-body">
<h5 class="card-title"><?php echo htmlspecialchars($course['name']); ?></h5>
<p class="card-text"><?php echo htmlspecialchars($course['description']); ?></p>
</div>
<div class="card-footer bg-transparent border-top-0">
<a href="#" class="btn btn-outline-primary">Learn More</a>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</section>
<!-- About Section -->
<section id="about" class="py-5 bg-light rounded my-5 p-4">
<div class="row align-items-center">
<div class="col-md-6">
<h2 class="mb-4">About Our University</h2>
<p>Founded on the principles of innovation and excellence, the University of Tomorrow is dedicated to providing a transformative education. We empower students to think critically, solve complex problems, and become leaders in their chosen fields. Our commitment to research and community engagement makes us a beacon of knowledge and progress.</p>
</div>
<div class="col-md-6 text-center">
<img src="https://via.placeholder.com/400x300.png?text=University+Campus" class="img-fluid rounded" alt="University Campus">
</div>
</div>
</section>
</main> </main>
<footer>
Page updated: <?= htmlspecialchars($now) ?> (UTC) <!-- Footer -->
<footer id="contact" class="footer">
<div class="container text-center">
<p>&copy; <?php echo date("Y"); ?> University of Tomorrow. All Rights Reserved.</p>
<div>
<a href="#" class="text-white me-3"><i class="bi bi-twitter-x"></i></a>
<a href="#" class="text-white me-3"><i class="bi bi-facebook"></i></a>
<a href="#" class="text-white me-3"><i class="bi bi-linkedin"></i></a>
<a href="#" class="text-white"><i class="bi bi-instagram"></i></a>
</div>
</div>
</footer> </footer>
<!-- Bootstrap 5 JS Bundle -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
</body> </body>
</html> </html>

85
login.php Normal file
View File

@ -0,0 +1,85 @@
<?php
session_start();
require_once 'db/config.php';
// If user is already logged in, redirect to dashboard
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
header('Location: dashboard.php');
exit;
}
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if (empty($username) || empty($password)) {
$error = 'Please enter both username and password.';
} else {
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());
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login - 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>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-6 col-lg-4" style="margin-top: 100px;">
<div class="card">
<div class="card-body">
<h3 class="card-title text-center mb-4">Student Login</h3>
<?php if ($error): ?>
<div class="alert alert-danger"><?php echo htmlspecialchars($error); ?></div>
<?php endif; ?>
<form action="login.php" 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>
<div class="d-grid">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
<div class="text-center mt-3">
<p class="text-muted">Use `student` / `password123` to log in.</p>
<a href="index.php">Back to Home</a>
</div>
</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
logout.php Normal file
View File

@ -0,0 +1,6 @@
<?php
session_start();
$_SESSION = [];
session_destroy();
header('Location: login.php');
exit;

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>