Przejdź do głównej zawartości

27. Mini platforma e-learningowa

Mini platforma e-learningowa

Uproszczona platforma do nauki online: lista kursów z lekcjami, śledzenie postępu uczestnika (które lekcje zostały ukończone) oraz prosty quiz na zakończenie kursu.

  • Modelowania hierarchii danych: kurs → lekcje → quiz
  • Śledzenia postępu w sesji PHP
  • Renderowania formularzy quizowych z wielokrotnym wyborem
  • Obliczania wyniku quizu i przechowywania go
  • Wyświetlania paska postępu (progress bar)
  1. Strona główna — lista dostępnych kursów z krótkim opisem
  2. Widok kursu — spis lekcji z oznaczeniem ukończonych
  3. Lekcja — treść tekstowa + przycisk „Ukończ lekcję”
  4. Quiz — 5 pytań jednokrotnego wyboru po ukończeniu lekcji/kursu
  5. Wynik — procent poprawnych odpowiedzi i możliwość powtórzenia
{
"courses": [
{
"id": 1,
"title": "Podstawy PHP",
"description": "Zmienne, tablice, pętle i formularze",
"lessons": [
{
"id": 1,
"title": "Zmienne i typy danych",
"content": "W PHP zmienne zaczynają się od znaku dolara..."
}
],
"quiz": [
{
"id": 1,
"question": "Jak zadeklarować zmienną w PHP?",
"options": ["$nazwa", "#nazwa", "@nazwa", "var nazwa"],
"correct": 0
}
]
}
]
}

Wymagane funkcje:

  • Lista kursów i lekcji
  • Wyświetlanie treści lekcji
  • Oznaczanie lekcji jako ukończonej (sesja)
  • Prosty quiz (3 pytania, bez zapisywania wyników)
  • Zapis struktury kursów w JSON
Ocena: 3.0
  • Folderelearning/
    • index.php
    • kurs.php
    • lekcja.php
    • quiz.php
    • wynik.php
    • panel.php
    • Folderincludes/
      • functions.php
      • progress.php
      • auth.php
    • Folderdata/
      • courses.json
      • results.json
    • Foldercss/
      • style.css

Śledzenie postępu w sesji:

function markLessonComplete(int $courseId, int $lessonId): void {
session_start();
$_SESSION['progress'][$courseId][$lessonId] = true;
}
function getLessonProgress(int $courseId, array $lessons): array {
session_start();
$completed = $_SESSION['progress'][$courseId] ?? [];
$total = count($lessons);
$done = count($completed);
return ['done' => $done, 'total' => $total, 'percent' => $total > 0 ? round($done / $total * 100) : 0];
}

Obliczanie wyniku quizu:

function gradeQuiz(array $questions, array $answers): array {
$correct = 0;
foreach ($questions as $q) {
$userAnswer = (int)($answers[$q['id']] ?? -1);
if ($userAnswer === $q['correct']) $correct++;
}
$total = count($questions);
return ['correct' => $correct, 'total' => $total, 'percent' => round($correct / $total * 100)];
}