Lekcja 20. Projekt końcowy: kompletny serwis filmowy
Trudny / egzaminacyjnyPo 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
Zbuduj samą bazę danych (5 tabel z diagramu) i stronę index.php wyświetlającą katalog filmów — na razie bez logowania i koszyka.
Rozbuduj projekt o rejestrację i logowanie z ochroną sesji — użytkownik powinien móc założyć konto, zalogować się i zobaczyć spersonalizowany panel.
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.