Skip to content

System rezerwacji stanowiska

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?

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

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.

  1. Formularz rezerwacji Użytkownik wybiera numer stanowiska (np. 1-10), datę rezerwacji oraz opcjonalnie godziny (od-do). Dane są walidowane przed zapisem.

  2. Zapis rezerwacji Każda rezerwacja jest zapisywana do pliku JSON z informacją o stanowisku, dacie, godzinach i osobie rezerwującej.

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

  • Formularz: numer stanowiska, data, imię rezerwującego
  • Walidacja podstawowa w PHP (wymagane pola, poprawna data)
  • Zapis rezerwacji do pliku JSON
  • Wyświetlanie listy wszystkich rezerwacji
  • Prosty interfejs CSS (tabela rezerwacji)

Przykładowy scenariusz:

Pracownik 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.

Ocena: 3.0

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:

  • Pokazać postępy - nawet małe kroki się liczą
  • Wyjaśnić wątpliwości - pytaj, nie zgaduj
  • Skonsultować rozwiązania - feedback pomoże Ci się rozwijać

Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!