質問: ### お問い合わせ フォームのバリデーションについて 一般的なwebのお問い合わせフォームを作っていますが、 チェックボックス、セレクトメニュー、ラジオボタンの選択型の項目についても、 値の検証(バリデーション)は必要でしょうか? htmlのvalueはどんな値でも送信は可能なのでお問い合わせフォームの送信項目は全てバリデーションをかけるべきだと思いますが、必要でしょうか? ### 該当のソースコード ``` 連絡先 自宅 オフィス 携帯電話 ``` ``` if ($_POST['contact_environment'] != '自宅' or $_POST['contact_environment'] != 'オフィス' or $_POST['contact_environment'] != '携帯電話') { echo '不正入力です'; } ```
回答: > > フォームの送信項目は全てバリデーションをかけるべきだと思いますが、必要でしょうか? > > > 必要条件かと言えばそうでもないです。 結局匿名の投稿はある程度の汚染されたデータが交じるのは想定しなくてはなりません 投稿されたデータをDBなどに保存するのであればその時点で型を利用して弾くこともできます ユーザーの誤入力などをさけるサポート機能としては有効だと思います もちろんセレクトボックスやラジオボタン、チェックボックスなど選択肢がきまっているなら サーバー側で合致するかどうかのチェックはつけておいて損はないでしょう。 ``` ["regexp"=>"/^(自宅|オフィス|携帯電話)$/"]]); var_dump($contact_environment); ?> 連絡先 自宅 オフィス 携帯電話 ダミー(空データ) ダミー(hoge) ``` filter_inputをすれば * 当該のパラメータが送られてこなければnull * 想定通りの場合はその送られてきたデータ * 想定外のデータが来た場合はfalse が、それぞれ得られるので簡単にバリデートが可能です。 また、選択肢から選ばせる処理自体がユーザーからの誤入力を防ぐわけですし 通常のテキストボックスでもpatternやrequiredなどである程度の ユーザー補助としてのバリデートは可能です