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
This content is not available in your language yet.
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?
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.
Formularz dodawania zadania Użytkownik podaje przedmiot, opis zadania oraz termin wykonania (deadline).
Lista żądań System wyświetla wszystkie zadania w czytelnej formie, z wyroznieniem żądań przeterminowanych.
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:
Przykładowy scenariusz:
Ocena: 3.0Uczen 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.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Uczen widzi liste żądań posortowana po terminie. Zadania przeterminowane sa oznaczone na czerwono. Klika “Wykonane” przy zadaniu z matematyki - zmienia kolor na zielony. Filtruje liste po “do zrobienia” - widzi tylko niezrealizowane zadania.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Uczen edytuje zadanie - zmienia termin na pozniejszy. Usuwa stare wykonane zadania. Na dole strony widzi raport: “Matematyka: 5 żądań (80% wykonanych), J. polski: 3 zadania (100% wykonanych)”. Eksportuje liste do CSV dla rodzica.
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 wyswietlaniuforeach ($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:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!