Czego się nauczysz?
- Obsługi formularzy HTML i walidacji danych w PHP
- Pracy z godzinami i ich walidacja
- Sortowania danych chronologicznie
- Zapisu i odczytu danych z plikow JSON
This content is not available in your language yet.
Stworzysz Planer dnia - aplikacje umozliwiajaca zaplanowanie żądań na konkretny dzień. Użytkownik może dodawać zadania z godzina rozpoczecia, oznaczac je jako wykonane i przegladac plan dnia. Wszystkie dane sa zapisywane do pliku JSON.
Czego się nauczysz?
W prawdziwej pracy...
Aplikacje do planowania czasu (calendar apps, schedulers) to podstawa produktywnosci. Od prostych planerów po zaawansowane systemy jak Google Calendar czy Outlook - wszystkie opieraja się na zarzadzaniu czasem. Umiejetnosc tworzenia takich narzedzi to cenna kompetencja.
Formularz dodawania zadania Użytkownik podaje godzine rozpoczecia i opis zadania do wykonania.
Lista żądań dnia System wyświetla wszystkie zadania posortowane chronologicznie po godzinie.
Zarzadzanie zadaniami Użytkownik może oznaczyc zadanie jako wykonane lub usunąć je z planu.
Przykładowa struktura pliku JSON:
{ "tasks": [ { "id": 1, "time": "08:00", "description": "Sniadanie", "status": "done", "date": "2026-02-17", "created_at": "2026-02-17 07:00:00" }, { "id": 2, "time": "09:30", "description": "Spotkanie z nauczycielem", "status": "open", "date": "2026-02-17", "created_at": "2026-02-17 07:00:00" }, { "id": 3, "time": "14:30", "description": "Zadanie domowe z PHP", "status": "open", "date": "2026-02-17", "created_at": "2026-02-17 07:00:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wchodzi na strone i widzi formularz. Wpisuje godzine “14:30” i opis “Zadanie z PHP”. Po kliknieciu “Dodaj” zadanie pojawia się na liscie dnia. Dane sa zapisywane do pliku JSON.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik widzi plan dnia posortowany od najwczesniejszej godziny. Klika checkbox przy “Sniadanie” - zadanie zostaje przekreslone i zmienia kolor na szary. Nowe zadania automatycznie wskakuja na właściwe miejsce w harmonogramie.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik wybiera date jutrzejsza i planuje zadania. Widzi podsumowanie: “Wykonane: 3/8 (37%)”. Filtruje po “do zrobienia” - widzi tylko niezrealizowane. Na koniec dnia eksportuje plan do CSV jako backup.
Walidacja godziny:
$time = $_POST['time'] ?? '';$description = trim($_POST['description'] ?? '');$errors = [];
// Walidacja formatu HH:MMif (!preg_match('/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/', $time)) { $errors[] = "Podaj poprawna godzine w formacie HH:MM";}
if (empty($description)) { $errors[] = "Opis zadania jest wymagany";}Sortowanie po godzinie:
usort($data['tasks'], function($a, $b) { return strcmp($a['time'], $b['time']);});Filtrowanie żądań z dzisiaj:
$today = date('Y-m-d');$todayTasks = array_filter($data['tasks'], function($task) use ($today) { return $task['date'] === $today;});Oznaczanie jako wykonane:
if (isset($_POST['toggle_status'])) { $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'] = ($task['status'] === 'open') ? 'done' : 'open'; break; } }
file_put_contents('tasks.json', json_encode($data, JSON_PRETTY_PRINT));}Podsumowanie dnia:
function getDaySummary($tasks) { $total = count($tasks); $done = count(array_filter($tasks, fn($t) => $t['status'] === 'done')); $pending = $total - $done; $percent = $total > 0 ? round(($done / $total) * 100) : 0;
return [ 'total' => $total, 'done' => $done, 'pending' => $pending, 'percent' => $percent ];}Eksport do CSV:
function exportToCSV($tasks, $filename = 'plan_dnia.csv') { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=' . $filename);
$output = fopen('php://output', 'w'); fputcsv($output, ['Godzina', 'Zadanie', 'Status']);
foreach ($tasks as $task) { fputcsv($output, [ $task['time'], $task['description'], $task['status'] === 'done' ? 'Wykonane' : 'Do zrobienia' ]); }
fclose($output); exit;}Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!