入力データのエラー判定をしよう :: PHP でそれっぽいフォームを作成する その3
XSS 対策をしよう :: PHP でそれっぽいフォームを作成する その2 - kwsktr's study log
の続きです。
次に入力してもらったメールアドレスが正しい形かをチェックしたいと思います。
< input type="email" > を入力欄としたので、モダンブラウザによっては最低限のチェックをしてくれました。
Google Chrome や Firefox でしたら「<」を入力したら「正しくない」と教えてくれるのですが、おまけ程度に過ぎませんでした。
Safari だと何も起きませんでしたし。
Chrome でも、何も入力しないで submit ボタンを押したときにチェックをしてくれません。
POST を受け取る result.php では、空の文字列がそのまま表示される状態になっています。
「正しい」メールアドレスを判定する
では、どの段階でメールアドレスが正しいか、正しくないかを判定すればいいのか、ということを考えてみました。
あらゆるタイミングでチェックできたら素晴らしいのですが、ここはポイントを「送信ボタンを押されたら」に絞りたいと思います。
送信ボタンが押されたら、正しさチェックをして result.php に渡すことにします。
そのために、正しさチェックをする PHP ファイルを作ってあげると処理が解りやすくなります。
ここでは、check.php を作ることにしましょう。
check.php で何をする?
check.php で何をしたいかを考えてみます。
ひとまずは以下の3つを処理する仕様にしておきます。
問題はメールアドレスの「正しい」「正しくない」の判断は非常に難解だということです。
適当な正規表現で判定するのはよろしくないので、今回は PHP が用意してくれている filter_var関数を使ってみることにします。
厳密にやりたい、もっと理解したい場合には下記の Qiita の投稿が参考になります。
HTML - メールアドレスを表す現実的な正規表現 - Qiita
エラーメッセージを考える
まずは何をエラーとして扱うかを考えてみます。
正直、ユーザーはテキストボックスに何を入力してくるか解りません。
また、何も入力してこないかも知れません。
あらゆる条件を想定し、その全てに対応した複数のエラーメッセージを出して上げるのも親切でしょう。
しかし、ボクがユーザーだとしたら、重箱の角をつつくようなエラーメッセージを出されると不快に思うかも知れません。
ということで 2つだけにしました。
- メールアドレスの形式が
- 判定条件: filter_var 関数で false と判定される
- エラーメッセージ: 正しいメールアドレスを入力してください
- 判定条件: filter_var 関数で false と判定される
- そもそも入力がなかった場合
- 判定条件: 受け取った POST に 'email' が入っていない
- エラーメッセージ: メールアドレスを入力してください
- 判定条件: 受け取った POST に 'email' が入っていない
コードは次回に投下することにします。