Przejdź do głównej zawartości

Rejestr żądań domowych

Stworzysz Rejestr żądań domowych - aplikacje umozliwiajaca uczniowi zarzadzanie swoimi zadaniami domowymi. Użytkownik może dodawać zadania z przedmiotem, opisem i terminem wykonania, a nastepnie sledzic ich status. Wszystkie dane sa zapisywane do pliku JSON.

Czego się nauczysz?

  • Obsługi formularzy HTML i walidacji danych w PHP
  • Pracy z datami i ich porownywania
  • Implementacji statusow i filtrowania
  • Zapisu i odczytu danych z plikow JSON

W prawdziwej pracy...

Systemy zarzadzania zadaniami (todo listy, task trackery) sa jednym z najpopularniejszych typow aplikacji. Od prostych list żądań po zaawansowane systemy jak Jira czy Trello - wszystkie opieraja się na tych samych zasadach: dodawanie, edycja, statusy, terminy. To swietna podstawa do nauki CRUD.

  1. Formularz dodawania zadania Użytkownik podaje przedmiot, opis zadania oraz termin wykonania (deadline).

  2. Lista żądań System wyświetla wszystkie zadania w czytelnej formie, z wyroznieniem żądań przeterminowanych.

  3. Zarzadzanie statusem Użytkownik może oznaczyc zadanie jako wykonane lub usunąć je z listy.

Przykładowa struktura pliku JSON:

{
"tasks": [
{
"id": 1,
"subject": "Matematyka",
"description": "Zadania 1-10 że strony 45",
"deadline": "2026-02-20",
"status": "pending",
"created_at": "2026-02-17 14:30:00"
},
{
"id": 2,
"subject": "Język polski",
"description": "Wypracowanie na temat 'Moj bohater literacki'",
"deadline": "2026-02-18",
"status": "done",
"completed_at": "2026-02-17 20:00:00",
"created_at": "2026-02-15 10:00:00"
},
{
"id": 3,
"subject": "Historia",
"description": "Przeczytac rozdział 5",
"deadline": "2026-02-16",
"status": "overdue",
"created_at": "2026-02-14 09:00:00"
}
]
}

Wymagane funkcje:

  • Formularz z polami: przedmiot, opis, termin wykonania
  • Walidacja danych w PHP (niepuste pola, poprawna data)
  • Lista wszystkich żądań
  • Zapis żądań do pliku JSON
  • Prosty interfejs CSS (czytelny formularz i lista)

Przykładowy scenariusz:

Uczen wchodzi na strone i widzi formularz. Wpisuje “Matematyka”, “Zad. 1-5 str. 30” i wybiera date 20.02. Po kliknieciu “Dodaj” zadanie pojawia się na liscie. Dane sa zapisywane do pliku JSON.

Ocena: 3.0

Walidacja danych zadania:

$errors = [];
$subject = trim($_POST['subject'] ?? '');
$description = trim($_POST['description'] ?? '');
$deadline = $_POST['deadline'] ?? '';
if (empty($subject)) {
$errors[] = "Przedmiot jest wymagany";
}
if (empty($description)) {
$errors[] = "Opis zadania jest wymagany";
}
if (empty($deadline) || !strtotime($deadline)) {
$errors[] = "Podaj poprawna date";
}

Sprawdzanie czy zadanie jest przeterminowane:

function isOverdue($deadline, $status) {
if ($status === 'done') {
return false; // Wykonane nie może być przeterminowane
}
$deadlineDate = new DateTime($deadline);
$today = new DateTime('today');
return $deadlineDate < $today;
}
// Aktualizacja statusow przy wyswietlaniu
foreach ($data['tasks'] as &$task) {
if ($task['status'] === 'pending' && isOverdue($task['deadline'], $task['status'])) {
$task['status'] = 'overdue';
}
}

Oznaczanie zadania jako wykonane:

if (isset($_POST['complete_task'])) {
$taskId = (int)$_POST['task_id'];
$data = json_decode(file_get_contents('tasks.json'), true);
foreach ($data['tasks'] as &$task) {
if ($task['id'] === $taskId) {
$task['status'] = 'done';
$task['completed_at'] = date('Y-m-d H:i:s');
break;
}
}
file_put_contents('tasks.json', json_encode($data, JSON_PRETTY_PRINT));
}

Sortowanie po terminie:

usort($data['tasks'], function($a, $b) {
return strtotime($a['deadline']) - strtotime($b['deadline']);
});

Filtrowanie żądań:

$filter = $_GET['filter'] ?? 'all';
$filteredTasks = array_filter($data['tasks'], function($task) use ($filter) {
switch ($filter) {
case 'pending': return $task['status'] === 'pending';
case 'done': return $task['status'] === 'done';
case 'overdue': return $task['status'] === 'overdue';
default: return true;
}
});

Wykorzystaj lekcje!

Cotygodniowe spotkania podczas lekcji to idealny moment, by:

  • Pokazac postepy - nawet małe kroki się licza
  • Wyjaśnić watpliwosci - pytaj, nie zgaduj
  • Skonsultowac rozwiązania - feedback pomoze Ci się rozwijac

Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!