W budowie
Punkt kontrolny · Diagnostyka Sprawdź opanowanie zaawansowanych mechanizmów aplikacji webowej i gotowość do egzaminu zawodowego

PUNKT KONTROLNY 07 · FINAŁ KURSOWY

Pliki, architektura aplikacji i synteza CKE: upload, wzorzec PRG, PDO i arkusze egzaminacyjne

Części 19–21 to zwieńczenie całego kursu PHP. Zamiast izolowanych instrukcji budujesz tu kompletne, produkcyjne mechanizmy: bezpieczny odbiór plików przesyłanych przez formularze, wzorzec Post-Redirect-Get chroniący przed powielaniem zamówień po odświeżeniu strony, obiektowy dostęp do danych przez PDO oraz pełne arkusze egzaminacyjne INF.03 / EE.09.

Ten quiz diagnostyczny weryfikuje Twoją wiedzę techniczną oraz zrozumienie dobrych praktyk programistycznych wymaganych na egzaminie zawodowym i w pracy zawodowej technika programisty.

Zakres sprawdzianu

  • Operacje na plikach i przesyłanie plików na serwer (Część 19): zapis raportów przez file_put_contents(), dopisywanie logów z flagą FILE_APPEND, atrybut formularza enctype="multipart/form-data", tablica $_FILES, kody błędów uploadu, walidacja rozszerzenia oraz bezpieczne przenoszenie plików funkcją move_uploaded_file() z unikalną nazwą.
  • Architektura aplikacji webowej i standard PDO (Część 20): wzorzec Post-Redirect-Get (PRG) z nagłówkiem Location i obowiązkowym exit;, komunikaty jednorazowe Flash w sesji z natychmiastowym unset(), formularze z pamięcią wartości (Sticky Form) odporne na XSS oraz obiektowe połączenia i zapytania z parametrami nazwanymi w standardzie PDO.
  • Synteza i symulacje arkuszy egzaminacyjnych CKE (Część 21): relacyjne zapytania INNER JOIN z parametrami, bezpieczne haszowanie haseł algorytmem Bcrypt (password_hash i password_verify), transakcyjna modyfikacja wielu tabel, usuwanie rekordów bezpiecznym żądaniem POST oraz wzorcowa architektura kodu PHP bez błędu „Headers already sent”.

Quiz diagnostyczny — sprawdź swoją gotowość do egzaminu

Zaznacz odpowiedzi i kliknij przycisk na dole. Błędne odpowiedzi wskażą Ci dokładnie te ćwiczenia, które warto powtórzyć przed egzaminem.

1. Formularz zawiera pole do wyboru pliku: <input type="file" name="zdjecie">. Po jego zatwierdzeniu tablica $_FILES['zdjecie'] jest pusta lub zawiera błąd UPLOAD_ERR_NO_FILE, mimo że użytkownik wskazał plik na dysku. Co jest najbardziej prawdopodobną przyczyną tego problemu?
2. Dlaczego sprawdzanie poprawności przesyłanego pliku graficznego wyłącznie na podstawie wartości $_FILES['plik']['type'] (MIME type) jest krytycznym błędem bezpieczeństwa aplikacji?
3. Po pomyślnym przesłaniu pliku zapisujesz go na serwerze: move_uploaded_file($plik['tmp_name'], 'obrazy/' . $plik['name']);. Jakie poważne zagrożenie niesie za sobą bezpośrednie użycie oryginalnej nazwy $_FILES['plik']['name']?
4. Skrypt rejestruje logi logowania do pliku wizyty.log. Użyto wywołania: file_put_contents('wizyty.log', $wpis);. Jaki będzie rezultat działania tego skryptu przy wielokrotnych wizytach użytkowników?
5. Dlaczego we współczesnych aplikacjach webowych po poprawnym przetworzeniu formularza POST stosuje się przekierowanie HTTP (wzorzec Post-Redirect-Get): header('Location: index.php'); exit;?
6. Wzorzec PRG rozdziela zapis danych (POST) od ich wyświetlenia (GET). W jaki sposób realizuje się w PHP mechanizm komunikatów Flash (jednorazowych powiadomień dla użytkownika)?
7. Użytkownik popełnił błąd walidacji w formularzu. W jaki sposób poprawnie i bezpiecznie zachować wpisaną wcześniej treść w polu tekstowym <input name="miasto"> (Sticky Form)?
8. Dlaczego biblioteka PDO (PHP Data Objects) jest standardem rynkowym i stanowi wygodniejszą alternatywę dla mysqli przy zapytaniach z parametrami?
9. W arkuszu egzaminacyjnym INF.03 należy wyświetlić listę zamówień zalogowanego klienta, łącząc dane z tabel zamowienia (kolumny id, data, kwota) i klienci (kolumny imie, nazwisko). Jak wygląda poprawna konstrukcja takiego zapytania SQL z parametrem?
10. W module rejestracji i logowania użytkowników na egzaminie INF.03 zastosowano funkcje haszujące. Który zestaw funkcji i reguł jest obecnie jedynym bezpiecznym standardem w języku PHP?
11. Podczas oceny egzaminu INF.03 / EE.09 egzaminator sprawdza architekturę skryptu realizującego obsługę formularza i bazy danych. Który układ kodu zapewnia najwyższą czytelność i chroni przed błędem typu „Headers already sent”?
12. Dlaczego operację usunięcia rekordu z bazy danych (np. pojazdu o podanym id) należy realizować żądaniem POST z ukrytym polem i przyciskiem, a NIE zwykłym linkiem <a href="usun.php?id=5">?

Matryca powtórek

Jeśli po kliknięciu sprawdzenia któreś pytanie zaznaczyło się na czerwono, poniższa tabela wskazuje dokładne ćwiczenie, które pozwoli Ci to przećwiczyć w praktyce:

PytaniaObszar wiedzyRekomendowane ćwiczenie
Pytania 1–2Atrybut enctype="multipart/form-data" oraz bezpieczna walidacja typu i rozszerzenia plikum19-9 (Pierwszy upload pliku) oraz m19-13 (Biała lista rozszerzeń graficznych)
Pytania 3–4Generowanie unikalnej nazwy pliku przez uniqid() oraz dopisywanie logów flagą FILE_APPENDm19-15 (Upload z unikalną nazwą pliku) oraz m19-2 (Dopisywanie do logu z FILE_APPEND)
Pytania 5–6Ochrona przed F5 wzorcem Post-Redirect-Get (PRG) oraz jednorazowe komunikaty Flash w sesjim20-3 (Pierwszy wzorzec PRG) oraz m20-5 (Komunikat Flash sukcesu w sesji)
Pytania 7–8Formularz z pamięcią (Sticky Form) z ENT_QUOTES oraz parametry nazwane w standardzie PDOm20-6 (Formularz Sticky Form) oraz m20-13 (PDO: parametry nazwane)
Pytania 9–10Relacyjne złączenia INNER JOIN z parametrami oraz standard password_hash i password_verifym21-11 (Profil klienta i JOIN) oraz m21-9 (Rejestracja i password_hash)
Pytania 11–12Architektura pliku bez błędu "Headers already sent" oraz bezpieczne usuwanie żądaniem POSTm21-15 (Wielokrokowa synteza CKE) oraz m21-16 (Grand Finale: CRUD i statystyki)