Czego się nauczysz?
- Obsługi formularzy HTML i walidacji danych w PHP
- Grupowania danych po datach
- Obliczania sum i statystyk
- Zapisu i odczytu danych z plikow JSON
Stworzysz Rejestr diet - aplikacje umozliwiajaca zapisywanie posiłków wraz z informacja o kalorycznosci. Użytkownik może dodawać posiłki, przegladac historie i sledzic dzienne spozycie kalorii. Wszystkie dane sa zapisywane do pliku JSON.
Czego się nauczysz?
W prawdziwej pracy...
Aplikacje do sledzenia diety i zdrowego stylu zycia sa jednym z najpopularniejszych typow aplikacji mobilnych i webowych. Umiejetnosc tworzenia systemow rejestrujacych dane użytkownika, liczacych statystyki i generujacych raporty to podstawa wielu aplikacji biznesowych i konsumenckich.
Formularz dodawania posiłku Użytkownik podaje nazwe posiłku, liczbe kalorii, date i opcjonalnie kategorie (sniadanie, obiad, kolacja, przekaska).
Lista posiłków System wyświetla wszystkie zapisane posiłki w czytelnej formie, pogrupowane po dniach.
Suma kalorii Aplikacja oblicza i wyświetla sume kalorii dla każdego dnia oraz łączna sume.
Przykładowa struktura pliku JSON:
{ "meals": [ { "id": 1, "name": "Owsianka z owocami", "calories": 350, "category": "breakfast", "date": "2026-02-17", "created_at": "2026-02-17 08:30:00" }, { "id": 2, "name": "Kurczak z ryzem", "calories": 650, "category": "lunch", "date": "2026-02-17", "created_at": "2026-02-17 13:00:00" }, { "id": 3, "name": "Sałatka grecka", "calories": 400, "category": "dinner", "date": "2026-02-17", "created_at": "2026-02-17 19:00:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wchodzi na strone i widzi formularz. Wpisuje “Kanapka z serem”, 300 kalorii i dzisiejsza date. Po kliknieciu “Dodaj” posiłek pojawia się na liscie. Dane sa zapisywane do pliku JSON.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik dodaje posiłek kategorii “obiad”. Pod formularzem widzi dzisiejsze posiłki pogrupowane po kategoriach i sume kalorii: “Dzisiaj: 1400 kcal”. Może wybrać filtr “wczoraj” i zobaczyc wczorajsze dane.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik ustawia cel 2000 kcal dziennie. Po dodaniu posiłków widzi pasek postepu: “1400/2000 kcal (70%)”. Gdy przekroczy cel, pasek robi się czerwony. Na dole strony widzi prosty wykres słupkowy z ostatnich 7 dni. Może wyeksportowac dane do CSV.
Walidacja danych posiłku:
$errors = [];$name = trim($_POST['name'] ?? '');$calories = filter_var($_POST['calories'], FILTER_VALIDATE_INT);$date = $_POST['date'] ?? '';
if (empty($name)) { $errors[] = "Nazwa posiłku jest wymagana";}if ($calories === false || $calories <= 0) { $errors[] = "Kalorie musza być liczba dodatnia";}if (empty($date) || !strtotime($date)) { $errors[] = "Podaj poprawna date";}Grupowanie posiłków po dacie:
$mealsByDate = [];foreach ($data['meals'] as $meal) { $date = $meal['date']; if (!isset($mealsByDate[$date])) { $mealsByDate[$date] = []; } $mealsByDate[$date][] = $meal;}krsort($mealsByDate); // Sortuj malejaco po dacieObliczanie sumy kalorii dla dnia:
function getDailyCalories($meals, $date) { $total = 0; foreach ($meals as $meal) { if ($meal['date'] === $date) { $total += $meal['calories']; } } return $total;}Zapis do JSON:
$data = json_decode(file_get_contents('meals.json'), true) ?? ['meals' => []];$data['meals'][] = [ 'id' => count($data['meals']) + 1, 'name' => $name, 'calories' => $calories, 'category' => $_POST['category'] ?? 'other', 'date' => $date, 'created_at' => date('Y-m-d H:i:s')];file_put_contents('meals.json', json_encode($data, JSON_PRETTY_PRINT));Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!