第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)