第8章 リクエスト情報 / 第4回 模擬試験
PHPの`$_POST`によるフォーム送信の処理に関する次の記述のうち、正しいものはどれか。
HTMLフォームで`method="post"`を指定すると、送信データが`$_POST`で受け取れる。
正解
フォームから送信されたデータは、エスケープ処理を一切行わなくても常に安全である。
`$_POST`はチェックボックスなど複数選択の値には対応していない。
`$_POST`データはURLに表示される。
解説
HTMLフォームの`<form method="post">`で送信されたデータは、PHP側で`$_POST`スーパーグローバル変数を通じて受け取れます。
他の選択肢が誤りである理由は次の通りです。
・フォームから送信されたデータ(ユーザー入力)は信頼できないものとして扱う必要があり、画面に表示する際は`htmlspecialchars()`などでエスケープしないとXSSの原因になります。「エスケープ不要で常に安全」というのは誤りです。
・チェックボックスなど複数の値を送信したい場合は、`<input type="checkbox" name="items[]">`のように名前の末尾に`[]`を付けることで、`$_POST['items']`を配列として受け取れます。「対応していない」は誤りです。
・POSTデータはHTTPリクエストボディに含まれ、URLには表示されません(URLに表示されるのは`$_GET`のデータです)。
例:
```
<form method="post" action="/submit">
<input type="checkbox" name="items[]" value="a">
<input type="checkbox" name="items[]" value="b">
</form>
```
```php
print_r($_POST['items']); // ['a', 'b'](チェックした分だけ配列に入る)
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.2節 ポストデータ p.355〜360)