W budowie
Punkt kontrolny · Diagnostyka Sprawdź opanowanie stanu aplikacji i zapytań relacyjnych przed wejściem w modyfikację bazy danych (DDL/DML)

PUNKT KONTROLNY 04

Sesje, ciasteczka i odczyt z bazy danych: stan aplikacji i relacyjne zapytania SQL

Części 10–12 to kluczowy etap kursu łączący mechanizmy podtrzymywania stanu (sesje, ciasteczka) z pobieraniem danych z bazy MySQL (mysqli, filtrowanie, złączenia tabel). Zanim przejdziesz do definiowania struktur i modyfikacji danych (DDL i DML w Częściach 13–15), upewnij się, że bezbłędnie rozumiesz cykl życia sesji i poprawność relacyjnych zapytań SQL.

Zakres sprawdzianu

  • Sesje i ciasteczka (Część 10): inicjalizacja session_start() przed nagłówkami HTTP, superglobalna $_SESSION, niszczenie sesji (session_destroy(), unset()), mechanizm działania setcookie(), odczyt $_COOKIE i usuwanie ciasteczek czasem z przeszłości.
  • SQL i podstawy mysqli (Część 11): nawiązywanie połączenia mysqli_connect(), wykonywanie zapytań mysqli_query(), odczyt wiersz po wierszu mysqli_fetch_assoc() w pętli while, kontrola liczby wierszy mysqli_num_rows() oraz ochrona przed XSS przez htmlspecialchars().
  • Filtrowanie, sortowanie i relacje (Część 12): operatory logiczne AND/OR (priorytet operatorów), sortowanie wielopoziomowe ORDER BY, paginacja LIMIT ... OFFSET ..., złączenia INNER JOIN vs LEFT JOIN (wartości NULL) oraz unikanie kolizji nazw kolumn przez aliasy AS.

Quiz diagnostyczny — sprawdź swoją pewność

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

1. W pliku PHP przed znacznikiem otwierającym <?php znalazł się kod HTML: <!doctype html>, a dopiero wewnątrz skryptu wywołano session_start();. Jaki będzie skutek wykonania tego kodu przy domyślnej konfiguracji serwera?
2. W nowo otwartej przeglądarce użytkownik wszedł na stronę ze skryptem: setcookie('rabat', '15', time() + 3600); echo $_COOKIE['rabat'] ?? 'brak';. Co wyświetli się na ekranie podczas tego pierwszego żądania?
3. W jaki sposób skrypt PHP nakazuje przeglądarce klienta natychmiastowe i trwałe usunięcie zapisanego wcześniej ciasteczka o nazwie 'zalogowany'?
4. Uczeń przetestował procedurę wylogowania:
session_start(); $_SESSION['rola'] = 'admin'; session_destroy(); echo $_SESSION['rola'] ?? 'wylogowano';
Co pojawi się na ekranie i dlaczego?
5. Tabela klienci w bazie MySQL jest całkowicie pusta. Co dokładnie zwróci instrukcja $wynik = mysqli_query($conn, "SELECT * FROM klienci");?
6. Na jakiej zasadzie standardowa pętla while ($w = mysqli_fetch_assoc($wynik)) w PHP rozpoznaje, że dotarła do końca zbioru rekordów i kończy iterację?
7. Programista chce sprawdzić, ile pozycji zwróciło zapytanie SELECT zapisane w zmiennej $wynik, aby przy braku danych wyświetlić komunikat: Brak produktów. Której funkcji powinien użyć?
8. W jakim celu wartości kolumn tekstowych odczytane z bazy danych (np. $w['nazwisko']) zabezpiecza się funkcją htmlspecialchars() przed wypisaniem ich w kodzie HTML strony?
9. Przeanalizuj zapytanie SQL:
SELECT model FROM auta WHERE kolor = 'czerwony' OR kolor = 'czarny' AND rok > 2020;
Które samochody zostaną zwrócone w wyniku braku nawiasów w klauzuli WHERE?
10. Która klauzula SQL poprawnie pobierze drugą stronę wyników z tabeli (rekordy od 11 do 20), posortowane od najwyższego identyfikatora id?
11. Zapytanie łączy użytkowników z ich rolami:
SELECT u.login, r.nazwa FROM uzytkownicy AS u LEFT JOIN role AS r ON u.id_roli = r.id;
Użytkownik 'nowak' ma w kolumnie id_roli wartość NULL (brak roli). Co znajdzie się w wyniku dla tego użytkownika?
12. Obie złączone tabele posiadają kolumnę nazwa:
SELECT towary.nazwa, kategorie.nazwa FROM towary JOIN kategorie ON towary.id_kat = kategorie.id;
Jaki problem wystąpi w PHP podczas odczytu wyniku przez $w = mysqli_fetch_assoc($wynik);?

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–2Inicjalizacja sesji przed nagłówkami HTTP oraz zapis ciasteczek przez setcookiem10-6 (Sesja przed HTML) oraz m10-14 (Zapis ciasteczka setcookie)
Pytania 3–4Usuwanie ciasteczek czasem z przeszłości oraz zachowanie tablicy $_SESSION po wylogowanium10-16 (Usuwanie ciasteczka) oraz m10-3 (Wylogowanie z sesji)
Pytania 5–6Wartość zwracana przez mysqli_query przy pustym wyniku oraz pętla odczytu while z fetch_assocm11-8 (Odczyt jednego wiersza) oraz m11-2 (Pętla while z fetch_assoc)
Pytania 7–8Zliczanie wierszy zapytania przez mysqli_num_rows oraz ochrona przed XSS z użyciem htmlspecialcharsm11-10 (Liczba rekordów z mysqli_num_rows) oraz m11-11 (Bezpieczne wyświetlanie danych)
Pytania 9–10Priorytet operatorów logicznych AND/OR w klauzuli WHERE oraz stronicowanie ORDER BY z LIMIT OFFSETm12-13 (Warunek WHERE z AND) oraz m12-11 (Paginacja wyników LIMIT z OFFSET)
Pytania 11–12Zachowanie wierszy i wartości NULL w złączeniu LEFT JOIN oraz unikanie kolizji nazw kolumn przez aliasy ASm12-10 (Produkt bez kategorii - LEFT JOIN) oraz m12-9 (Aliasy kolumn w JOIN)