Czego się nauczysz?
- Pracy z datami i kalendarzem w PHP
- Wykrywania konfliktów rezerwacji (nakładających się terminów)
- Walidacji dostępności zasobów
- Tworzenia prostego systemu uprawnień
This content is not available in your language yet.
Stworzysz System rezerwacji stanowiska - aplikację webową do zarządzania rezerwacjami stanowisk pracy (np. biurek w coworkingu, komputerów w pracowni). Użytkownik wybiera numer stanowiska i datę, a system zapisuje rezerwację i wykrywa potencjalne konflikty. To typowy przykład systemu bookingowego używanego w firmach i instytucjach.
Czego się nauczysz?
W prawdziwej pracy...
Systemy rezerwacji to jedna z najpopularniejszych kategorii aplikacji webowych - od sal konferencyjnych przez stanowiska pracy po wizyty u lekarza. Umiejętność zarządzania zasobami czasowymi i wykrywania konfliktów jest kluczowa w wielu projektach komercyjnych.
Formularz rezerwacji Użytkownik wybiera numer stanowiska (np. 1-10), datę rezerwacji oraz opcjonalnie godziny (od-do). Dane są walidowane przed zapisem.
Zapis rezerwacji Każda rezerwacja jest zapisywana do pliku JSON z informacją o stanowisku, dacie, godzinach i osobie rezerwującej.
Wykrywanie konfliktów System sprawdza, czy wybrane stanowisko nie jest już zarezerwowane na podany termin i informuje użytkownika o konflikcie.
Przykładowa struktura pliku JSON:
{ "reservations": [ { "id": 1, "station": 3, "date": "2026-02-15", "time_from": "08:00", "time_to": "12:00", "user": "Jan Kowalski", "created_at": "2026-02-13 10:30:00" }, { "id": 2, "station": 3, "date": "2026-02-15", "time_from": "13:00", "time_to": "17:00", "user": "Anna Nowak", "created_at": "2026-02-13 11:45:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Pracownik otwiera aplikację i rezerwuje stanowisko nr 3 na dzień 15.02.2026. Wpisuje swoje imię “Jan Kowalski” i klika “Zarezerwuj”. Rezerwacja pojawia się na liście wszystkich rezerwacji.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Anna próbuje zarezerwować stanowisko 3 na 15.02.2026 godz. 10:00-14:00, ale system wykrywa konflikt - Jan już ma rezerwację 08:00-12:00. Anna widzi komunikat “Konflikt! Stanowisko zajęte w godzinach 08:00-12:00” i wybiera inne godziny (13:00-17:00).
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Administrator loguje się do systemu i widzi kalendarz że wszystkimi rezerwacjami. Zauważa, że pracownik zrezygnował z projektu - usuwa jego rezerwacje. Generuje raport obłożenia za luty: “Stanowisko 3: 85% czasu zajęte, Stanowisko 7: 20% czasu zajęte”.
Walidacja daty (nie może być z przeszłości):
<?php$date = $_POST['date'] ?? '';$today = date('Y-m-d');
if ($date < $today) { $errors[] = 'Nie można rezerwować na datę z przeszłości';}?>Wykrywanie konfliktu rezerwacji:
<?php$reservations = json_decode(file_get_contents('reservations.json'), true)['reservations'];
$conflict = false;foreach ($reservations as $res) { if ($res['station'] == $station && $res['date'] == $date) { // Sprawdź nakładanie się godzin if ($timeFrom < $res['time_to'] && $timeTo > $res['time_from']) { $conflict = true; $conflictInfo = "Zajęte: {$res['time_from']}-{$res['time_to']} przez {$res['user']}"; break; } }}
if ($conflict) { $errors[] = "Konflikt rezerwacji! $conflictInfo";}?>Generowanie listy stanowisk:
<?php$stations = range(1, 10); // Stanowiska 1-10?><select name="station" required> <option value="">Wybierz stanowisko</option> <?php foreach ($stations as $num): ?> <option value="<?= $num ?>">Stanowisko <?= $num ?></option> <?php endforeach; ?></select>Filtrowanie rezerwacji po dacie:
<?php$filterDate = $_GET['date'] ?? '';
if (!empty($filterDate)) { $reservations = array_filter($reservations, function($res) use ($filterDate) { return $res['date'] === $filterDate; });}?>Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!