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łaniasetcookie(),odczyt$_COOKIEi 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 wierszumysqli_fetch_assoc()w pętliwhile,kontrola liczby wierszymysqli_num_rows()oraz ochrona przed XSS przezhtmlspecialchars(). - Filtrowanie, sortowanie i relacje (Część 12): operatory logiczne
AND/OR(priorytet operatorów), sortowanie wielopoziomoweORDER BY,paginacjaLIMIT ... OFFSET ...,złączeniaINNER JOINvsLEFT JOIN(wartościNULL) oraz unikanie kolizji nazw kolumn przez aliasyAS.
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:
Co pojawi się na ekranie i dlaczego?
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:
Które samochody zostaną zwrócone w wyniku braku nawiasów w klauzuli
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:
Użytkownik
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ę
Jaki problem wystąpi w PHP podczas odczytu wyniku przez
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:
| Pytania | Obszar wiedzy | Rekomendowane ćwiczenie |
|---|---|---|
| Pytania 1–2 | Inicjalizacja sesji przed nagłówkami HTTP oraz zapis ciasteczek przez setcookie | m10-6 (Sesja przed HTML) oraz m10-14 (Zapis ciasteczka setcookie) |
| Pytania 3–4 | Usuwanie ciasteczek czasem z przeszłości oraz zachowanie tablicy $_SESSION po wylogowaniu | m10-16 (Usuwanie ciasteczka) oraz m10-3 (Wylogowanie z sesji) |
| Pytania 5–6 | Wartość zwracana przez mysqli_query przy pustym wyniku oraz pętla odczytu while z fetch_assoc | m11-8 (Odczyt jednego wiersza) oraz m11-2 (Pętla while z fetch_assoc) |
| Pytania 7–8 | Zliczanie wierszy zapytania przez mysqli_num_rows oraz ochrona przed XSS z użyciem htmlspecialchars | m11-10 (Liczba rekordów z mysqli_num_rows) oraz m11-11 (Bezpieczne wyświetlanie danych) |
| Pytania 9–10 | Priorytet operatorów logicznych AND/OR w klauzuli WHERE oraz stronicowanie ORDER BY z LIMIT OFFSET | m12-13 (Warunek WHERE z AND) oraz m12-11 (Paginacja wyników LIMIT z OFFSET) |
| Pytania 11–12 | Zachowanie wierszy i wartości NULL w złączeniu LEFT JOIN oraz unikanie kolizji nazw kolumn przez aliasy AS | m12-10 (Produkt bez kategorii - LEFT JOIN) oraz m12-9 (Aliasy kolumn w JOIN) |