Przejdź do głównej zawartości

Planer dnia (mini)

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?

  • 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

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.

  1. Formularz dodawania zadania Użytkownik podaje godzine rozpoczecia i opis zadania do wykonania.

  2. Lista żądań dnia System wyświetla wszystkie zadania posortowane chronologicznie po godzinie.

  3. 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:

  • Formularz z polami: godzina, opis zadania
  • Walidacja danych w PHP (poprawna godzina, niepusty opis)
  • Lista żądań na dzisiaj
  • Zapis żądań do pliku JSON
  • Prosty interfejs CSS (czytelny formularz i lista)

Przykładowy scenariusz:

Uż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.

Ocena: 3.0

Walidacja godziny:

$time = $_POST['time'] ?? '';
$description = trim($_POST['description'] ?? '');
$errors = [];
// Walidacja formatu HH:MM
if (!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:

  • 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!