<form action="plik.php" method="post"> Przedstawiona definicja formularza została zastosowana na stronie internetowej, która wysyła dane do pliku...
<form action="plik.php" method="post">Przedstawiona definicja formularza została zastosowana na stronie internetowej, która wysyła dane do pliku zapisanego w języku PHP. W której tablicy będą dostępne dane z formularza?
A. $_COOKIE
B. $_POST
C. $_GET
D. $_ACTION
Pytanie z egzaminu CKE, czerwiec 2019 (arkusz EE.09-X-19.06).
W tym formularzu kluczowy jest atrybut method="post". To on decyduje, że dane wpisane w pola formularza zostaną przesłane do skryptu PHP metodą POST, a więc w PHP będą dostępne w superglobalnej tablicy $_POST. Atrybut action="plik.php" wskazuje tylko adres pliku, który ma obsłużyć żądanie, czyli tutaj plik.php. W praktyce wygląda to tak, że jeśli w formularzu jest pole name="login", to po wysłaniu formularza w PHP można odczytać wartość przez $_POST["login"]. Metoda POST jest często stosowana przy logowaniu, rejestracji, formularzach kontaktowych i dodawaniu danych do bazy, bo nie dopisuje wartości formularza do adresu URL. Moim zdaniem to jedna z podstawowych rzeczy w PHP, którą warto dobrze zapamiętać, bo pojawia się praktycznie w każdym projekcie webowym. Dobrą praktyką jest też sprawdzanie, czy dane istnieją, np. przez isset($_POST["login"]), oraz ich walidacja i filtrowanie przed użyciem. Samo POST nie oznacza jeszcze pełnego bezpieczeństwa, ale jest właściwym mechanizmem do przesyłania danych formularza, które nie powinny być widoczne w pasku adresu.
W pokazanej definicji formularza najważniejsze jest rozróżnienie między miejscem wysłania danych a sposobem ich wysłania. Atrybut action="plik.php" mówi tylko, jaki skrypt ma odebrać formularz, natomiast atrybut method="post" określa metodę HTTP. Skoro użyto POST, PHP automatycznie umieszcza przesłane wartości w tablicy superglobalnej $_POST. Częsty błąd polega na tym, że ktoś widzi formularz HTML i od razu myśli o $_GET, bo GET też służy do przekazywania danych do serwera. Jednak $_GET jest używane wtedy, gdy formularz ma method="get" albo gdy parametry są dopisane do adresu URL, na przykład plik.php?id=5. W tej sytuacji tak nie jest. Tablica $_COOKIE również nie pasuje, bo cookies to dane przechowywane po stronie przeglądarki i wysyłane automatycznie z żądaniem, zwykle do zapamiętywania sesji, preferencji użytkownika czy identyfikatora koszyka. Nie są one standardowym miejscem odbioru pól formularza. Z kolei $_ACTION nie jest standardową superglobalną tablicą PHP. To może brzmieć podobnie do atrybutu action z HTML, ale w PHP taka tablica nie istnieje. Z mojego doświadczenia właśnie mieszanie nazw atrybutów HTML z tablicami PHP jest tu najczęstszą pułapką. Warto zapamiętać prostą zasadę: method="get" prowadzi do $_GET, method="post" prowadzi do $_POST, a action tylko wskazuje plik obsługujący żądanie.