O zmiennej predefiniowanej $_POST z języka PHP można powiedzieć, że
A. zawiera dane bezpośrednio przesłane do skryptu z ciasteczka.
B. zawiera dane przesłane do skryptu z formularza.
C. jest rozszerzoną wersją tablicy $_SESSION.
D. jest kopią tablicy $_COOKIE.
Pytanie z egzaminu CKE, czerwiec 2022 (arkusz E.14-SG-22.06).
Zmienna predefiniowana $_POST w PHP jest superglobalną tablicą asocjacyjną, która zawiera dane przesłane do skryptu najczęściej z formularza HTML wysłanego metodą POST. W praktyce wygląda to tak: jeżeli formularz ma pole o nazwie email, to po wysłaniu formularza w PHP można odczytać wartość przez $_POST['email']. To jest bardzo częsty mechanizm przy logowaniu, rejestracji użytkownika, dodawaniu komentarzy, wysyłaniu zamówień albo zapisywaniu ustawień konta. Dane trafiają zwykle w treści żądania HTTP, a nie w adresie URL, jak przy metodzie GET. Moim zdaniem to jedna z pierwszych rzeczy w PHP, które naprawdę warto dobrze zrozumieć, bo formularze są wszędzie. Trzeba jednak pamiętać o dobrej praktyce: danych z $_POST nigdy nie traktujemy jako w pełni bezpiecznych. Należy je sprawdzać, filtrować i walidować, np. czy e-mail ma poprawny format, czy liczba faktycznie jest liczbą, i czy tekst nie zawiera niepożądanych danych. Przy zapisie do bazy stosuje się zapytania przygotowane, żeby ograniczyć ryzyko SQL injection. Warto też wiedzieć, że pliki wysłane formularzem nie trafiają do $_POST, tylko do $_FILES, co czasem myli początkujących.
W tym pytaniu łatwo się pomylić, bo $_POST, $_COOKIE i $_SESSION są w PHP superglobalnymi tablicami i wszystkie są dostępne w wielu miejscach skryptu bez ręcznego przekazywania ich jako parametrów. To podobieństwo jest jednak tylko techniczne, a ich znaczenie jest zupełnie inne. $_POST nie jest kopią $_COOKIE. Ciasteczka są przesyłane przez przeglądarkę w nagłówkach żądania HTTP i PHP udostępnia je w tablicy $_COOKIE. Służą zwykle do zapamiętywania drobnych informacji po stronie klienta, na przykład identyfikatora sesji, preferencji językowych albo zgód użytkownika. Dane formularza wysłanego metodą POST trafiają natomiast do treści żądania, więc PHP umieszcza je w $_POST. To inna część komunikacji klient-serwer. Również myślenie, że $_POST jest rozszerzoną wersją $_SESSION, prowadzi w złą stronę. Sesja jest mechanizmem przechowywania danych po stronie serwera, powiązanych z użytkownikiem najczęściej przez identyfikator sesji zapisany w ciasteczku. $_SESSION może zawierać np. informację, że użytkownik jest zalogowany, jego id albo koszyk zakupowy. $_POST zawiera tylko dane przesłane w konkretnym żądaniu, na przykład login i hasło wpisane w formularzu. Po odświeżeniu strony te dane mogą już nie być dostępne w taki sam sposób. Z mojego doświadczenia najczęstszy błąd polega na wrzucaniu wszystkich superglobalnych zmiennych do jednego worka. Warto zapamiętać prostą zasadę: $_POST to dane z formularza wysłane metodą POST, $_COOKIE to dane z ciasteczek, a $_SESSION to dane sesyjne przechowywane po stronie serwera. I jeszcze ważna rzecz praktyczna: niezależnie od źródła danych, zawsze trzeba je walidować, bo użytkownik może zmienić zarówno zawartość formularza, jak i ciasteczka.