W formularzu dokumentu PHP istnieje pole <input name="im">. Po wprowadzeniu przez użytkownika ciągu znaków „Janek”, w celu dodania zawartości pola do bazy danych, w tablicy $_POST zawarty jest element
A. Janek z kolejnym numerem indeksu.
B. im o indeksie Janek.
C. im z kolejnym numerem indeksu.
D. Janek o indeksie im.
Pytanie z egzaminu CKE, styczeń 2018 (arkusz E.14-X-18.01).
W tablicy $_POST dane z formularza są zapisywane według zasady: nazwa pola formularza staje się kluczem, a wpisana przez użytkownika treść staje się wartością. Skoro pole ma atrybut name="im", a użytkownik wpisał "Janek", to po wysłaniu formularza metodą POST otrzymujemy element $_POST["im"] o wartości "Janek". Czyli poprawnie: Janek o indeksie im. W praktyce w PHP odczytałbyś to np. tak: $imie = $_POST["im"];. Moim zdaniem to jedna z podstawowych rzeczy, które trzeba dobrze zrozumieć przy obsłudze formularzy, bo później dokładnie tak samo pobiera się login, hasło, e-mail czy treść komentarza. Warto też pamiętać o dobrych praktykach: przed użyciem danych z $_POST trzeba sprawdzić, czy element istnieje, np. przez isset($_POST["im"]), a przed zapisem do bazy danych nie wolno sklejać zapytania SQL zwykłym dodawaniem tekstu. Bezpieczniej używać zapytań przygotowanych, np. PDO albo mysqli z parametrami. Sama tablica $_POST nie zapisuje nic do bazy, ona tylko przechowuje dane przesłane z formularza po stronie serwera.
W tym pytaniu łatwo pomylić dwie rzeczy: nazwę pola formularza oraz wartość wpisaną przez użytkownika. Atrybut name nie jest treścią pola, tylko identyfikatorem, pod którym PHP zapisze daną w tablicy $_POST. Jeżeli pole formularza ma name="im", to właśnie "im" będzie indeksem, czyli kluczem tablicy asocjacyjnej. Wpisane "Janek" nie staje się indeksem, tylko wartością przypisaną do tego klucza. Dlatego myślenie, że w $_POST pojawi się element im o indeksie Janek, odwraca logikę działania formularza. To trochę tak, jakby w zeszycie nagłówek kolumny pomylić z wpisaną odpowiedzią ucznia. Również założenie, że PHP nada tu kolejny numer indeksu, nie pasuje do działania typowego formularza. Tablica $_POST jest tablicą asocjacyjną, gdy dane pochodzą z nazwanych pól formularza. Numerowane indeksy mogą pojawić się w innych sytuacjach, na przykład przy specjalnym zapisie nazw pól z nawiasami, typu zainteresowania[], ale nie przy zwykłym name="im". Z mojego doświadczenia wynika, że ten błąd bierze się często z kojarzenia tablic wyłącznie z indeksami 0, 1, 2 itd. W PHP tablica może jednak działać jak mapa klucz-wartość. Przy formularzach to bardzo ważne, bo później w kodzie odwołujesz się właśnie do konkretnych nazw pól, np. $_POST["email"], $_POST["haslo"] albo $_POST["im"]. Dopiero po poprawnym pobraniu i walidacji takich danych można myśleć o bezpiecznym dodaniu ich do bazy danych.