読者です 読者をやめる 読者になる 読者になる

kwsktr's study log

kwsktr のおべんきょログ

入力データのエラー判定をしよう :: PHP でそれっぽいフォームを作成する その3

XSS 対策をしよう :: PHP でそれっぽいフォームを作成する その2 - kwsktr's study log

の続きです。


次に入力してもらったメールアドレスが正しい形かをチェックしたいと思います。


< input type="email" > を入力欄としたので、モダンブラウザによっては最低限のチェックをしてくれました。
Google ChromeFirefox でしたら「<」を入力したら「正しくない」と教えてくれるのですが、おまけ程度に過ぎませんでした。
Safari だと何も起きませんでしたし。


Chrome でも、何も入力しないで submit ボタンを押したときにチェックをしてくれません。
POST を受け取る result.php では、空の文字列がそのまま表示される状態になっています。

「正しい」メールアドレスを判定する

では、どの段階でメールアドレスが正しいか、正しくないかを判定すればいいのか、ということを考えてみました。


あらゆるタイミングでチェックできたら素晴らしいのですが、ここはポイントを「送信ボタンを押されたら」に絞りたいと思います。
送信ボタンが押されたら、正しさチェックをして result.php に渡すことにします。


そのために、正しさチェックをする PHP ファイルを作ってあげると処理が解りやすくなります。
ここでは、check.php を作ることにしましょう。

check.php で何をする?

check.php で何をしたいかを考えてみます。
ひとまずは以下の3つを処理する仕様にしておきます。

  1. form.php から受け取ったメールアドレスが正しいかをチェック
  2. 正しくなかったら「正しくない」と form.php に送る
  3. 正しかったらメールアドレスを result.php に送る


問題はメールアドレスの「正しい」「正しくない」の判断は非常に難解だということです。
適当な正規表現で判定するのはよろしくないので、今回は PHP が用意してくれている filter_var関数を使ってみることにします。


厳密にやりたい、もっと理解したい場合には下記の Qiita の投稿が参考になります。
HTML - メールアドレスを表す現実的な正規表現 - Qiita

エラーメッセージを考える

まずは何をエラーとして扱うかを考えてみます。
正直、ユーザーはテキストボックスに何を入力してくるか解りません。
また、何も入力してこないかも知れません。


あらゆる条件を想定し、その全てに対応した複数のエラーメッセージを出して上げるのも親切でしょう。
しかし、ボクがユーザーだとしたら、重箱の角をつつくようなエラーメッセージを出されると不快に思うかも知れません。


ということで 2つだけにしました。

  1. メールアドレスの形式が
    • 判定条件: filter_var 関数で false と判定される
      • エラーメッセージ: 正しいメールアドレスを入力してください
  2. そもそも入力がなかった場合
    • 判定条件: 受け取った POST に 'email' が入っていない
      • エラーメッセージ: メールアドレスを入力してください


コードは次回に投下することにします。