Formularz wysyłany metodą POST zawiera dwa pola wyboru:
<input type="checkbox" name="jezyki[]" value="PHP"> <input type="checkbox" name="jezyki[]" value="SQL">Użytkownik zaznaczył oba pola i wysłał formularz. W skrypcie PHP element
$_POST['jezyki'] zawieraA. liczbę 2, czyli liczbę zaznaczonych pól.
Źle. Formularz nie wysyła liczby zaznaczeń; można ją policzyć funkcją count.
B. wartość logiczną true.
Źle. Przeglądarka wysyła treść atrybutu value, a nie wartość logiczną.
C. tablicę z wartościami PHP i SQL.
Dobrze. Nawiasy [] w nazwie pola sprawiają, że PHP zbiera zaznaczone wartości w tablicę.
D. napis „PHP, SQL”.
Źle. PHP nie skleja wartości w napis; zrobiłaby to dopiero funkcja implode.
Element
$_POST['jezyki'] zawiera tablicę z wartościami PHP i SQL. Nawiasy kwadratowe na końcu nazwy pola, czyli jezyki[], informują PHP, że z formularza może przyjść kilka wartości pod tą samą nazwą i trzeba je zebrać w tablicę. Każde zaznaczone pole dodaje do niej swoją wartość z atrybutu value, a niezaznaczone nie wysyła nic. Do zapamiętania: wiele wartości pod jedną nazwą wymaga nawiasów [] w atrybucie name. W skrypcie wartości odczytuje się pętlą, na przykład foreach ($_POST['jezyki'] as $j), a liczbę zaznaczeń daje count. To samo dotyczy listy <select multiple>. Jeśli żadne pole nie jest zaznaczone, klucz jezyki w ogóle nie pojawi się w tablicy.Najczęściej myli się tu sposób przesyłania danych z ich wyświetleniem. PHP nie łączy zaznaczonych wartości w jeden napis - taki tekst trzeba by dopiero utworzyć funkcją
implode(', ', $_POST['jezyki']). Liczba zaznaczonych pól nie jest wysyłana przez formularz; można ją policzyć w skrypcie przez count($_POST['jezyki']). Wartość logiczna true też się nie pojawia: przeglądarka wysyła treść atrybutu value, a gdyby go zabrakło, wysłałaby napis „on”. Dzięki nawiasom [] w nazwie pola PHP składa przesłane wartości w tablicę, więc $_POST['jezyki'] zawiera tablicę z elementami PHP i SQL. Bez nawiasów zostałaby tylko ostatnia wartość, SQL. Przed odczytem warto więc sprawdzić isset($_POST['jezyki']), bo przy braku zaznaczeń klucza nie będzie. Podgląd całej przesłanej tablicy daje print_r($_POST); albo var_dump($_POST);, co bardzo pomaga przy sprawdzaniu formularzy.