Dataniedziela, 9 sierpnia 2026 Czas07:54:58
← Aplikacje internetowe (PHP)

Lekcja 20. Projekt końcowy: kompletny serwis filmowy

Trudny / egzaminacyjny

Po co się tego uczymy?

Pojedyncze umiejętności — formularz, baza, sesja — to jedno. Prawdziwa wartość pojawia się dopiero wtedy, gdy złożysz je w jeden, spójny, DZIAŁAJĄCY serwis internetowy — dokładnie tak, jak wygląda prawdziwa praca programisty aplikacji webowych.

Teoria

To podsumowanie całego działu — zbudujesz KOMPLETNY, działający serwis filmowy, łącząc wszystkie 19 poprzednich lekcji w jeden spójny projekt. To dokładnie ten typ projektu, o którym pisałeś na początku tego działu.

Wymagana struktura bazy danych (możesz oprzeć się na bazie z Zadania 6 działu Bazy danych i SQL i ją rozbudować):
- Gatunki (id_gatunku, nazwa)
- Filmy (id_filmu, tytul, rok_produkcji, id_gatunku, cena_wypozyczenia)
- Uzytkownicy (id_uzytkownika, email, haslo — zahaszowane!)
- Zamowienia (id_zamowienia, id_klienta, data_zamowienia)
- PozycjeZamowienia (id_zamowienia, id_filmu, ilosc)

Wymagane strony serwisu:
1. index.php — katalog filmów pobranych z bazy (Lekcja 11), z przyciskiem "Dodaj do koszyka" przy każdym.
2. rejestracja.php — formularz rejestracji z pełną walidacją (Lekcja 8, 14).
3. logowanie.php — formularz logowania (Lekcja 15).
4. koszyk.php — zawartość koszyka z sesji, z sumą do zapłaty (Lekcja 17).
5. zaplac.php — zapis zamówienia do bazy i czyszczenie koszyka (Lekcja 18), dostępne TYLKO dla zalogowanych (Lekcja 16).
6. panel.php — strona chroniona (Lekcja 16) z historią zamówień zalogowanego użytkownika.
7. wyloguj.php — kończy sesję (Lekcja 15).

Wymagania techniczne: wszystkie zapytania z danymi od użytkownika jako prepared statements (Lekcja 19), wszystkie hasła zahaszowane, wszystkie dane wyjściowe przez htmlspecialchars().

Schemat

Uzytkownicy 1 ──── * Zamowienia 1 ──── * PozycjeZamowienia * ──── 1 Filmy
                                                                      |
                                                              Gatunki 1 ──── * (kategoria filmu)

Przykład z życia

To dokładnie taki projekt, jaki mógłbyś zobaczyć jako zadanie rekrutacyjne albo pierwsze prawdziwe zlecenie młodego programisty PHP — mały, ale kompletny serwis e-commerce z kontami użytkowników.

Ćwiczenie samodzielne

Zanim zaczniesz kodować, narysuj na kartce mapę wszystkich 7 stron serwisu i strzałkami zaznacz, jak użytkownik przechodzi między nimi (np. z koszyka do płatności, tylko gdy jest zalogowany).

Zadania do pracy własnej

  1. Zbuduj samą bazę danych (5 tabel z diagramu) i stronę index.php wyświetlającą katalog filmów — na razie bez logowania i koszyka.

  2. Rozbuduj projekt o rejestrację i logowanie z ochroną sesji — użytkownik powinien móc założyć konto, zalogować się i zobaczyć spersonalizowany panel.

  3. Zbuduj CAŁY serwis zgodnie ze specyfikacją z tej lekcji: katalog → rejestracja/logowanie → koszyk → płatność (zapis do bazy) → panel z historią zamówień → wylogowanie, z zastosowaniem prepared statements i haszowania haseł wszędzie, gdzie to konieczne.

Typowe błędy

Największy błąd na tym etapie to próba napisania wszystkiego naraz — buduj serwis DOKŁADNIE w kolejności z listy wymaganych stron, testując każdą osobno, zanim przejdziesz do kolejnej. Drugi błąd: kopiowanie fragmentów kodu z różnych lekcji bez zrozumienia, czego dokładnie potrzebujesz w danym miejscu — wróć do konkretnej lekcji, jeśli czegoś nie pamiętasz, zamiast zgadywać. Trzeci: zapomnienie o podstawowych zasadach bezpieczeństwa (Lekcja 19) "bo to tylko projekt szkolny" — dobre nawyki wyrobione teraz zostaną z Tobą na zawsze.

Nawiązanie do egzaminu zawodowego

Ten projekt w komplecie odpowiada dokładnie strukturze zadania praktycznego z części webowej egzaminu INF.03/INF.04 — aplikacja korzystająca z bazy danych, z formularzami, sesją i pełnym cyklem CRUD. To najlepsze możliwe przygotowanie do tej części egzaminu, jakie może dać ten kurs.