前の記事では、
HTMLフォームから送信されたデータを
PHPで 受け取って表示する ところまで進みました。
しかし、
「受け取れる」だけでは
Webアプリケーションとしては不十分です。
・未入力のまま送信されていないか
・想定外の値が入っていないか
・そのまま処理しても問題ないか
これらをチェックする処理が、
バリデーション(入力チェック) です。
この記事では、
PHPでバリデーションを行うための
考え方と最小実装 を
コード付きで解説します。
この記事で学べること
・バリデーションとは何か
・なぜバリデーションが必要なのか
・必須入力チェックの実装方法
・エラーメッセージの管理方法
・フォーム処理での基本パターン
バリデーションとは何か
バリデーションとは、
入力されたデータが正しいかどうかを確認する処理 です。
「正しい」とは、
・空でない
・形式が合っている
・想定した範囲内である
といった条件を満たしていることを指します。
なぜバリデーションが必要なのか
バリデーションを行わないと、
次のような問題が起こります。
・未入力データが保存される
・処理の途中でエラーが起きる
・想定外の値で不具合が起こる
また、
ユーザーは必ずしも
正しく入力してくれるとは限らない
という前提で考える必要があります。
バリデーションの基本的な考え方
PHPでのバリデーションは、
次の流れで考えると分かりやすくなります。
-
入力データを受け取る
-
条件に合っているか確認する
-
問題があればエラーを保存する
-
問題がなければ次の処理へ進む
エラーは配列で管理する
バリデーションでは、
エラーメッセージを配列で管理 するのが基本です。
理由は、
・複数のエラーを同時に扱える
・後で表示方法を変えやすい
・処理の流れが整理される
からです。
必須入力チェックの基本
まずは、
最も基本的な必須入力チェック を見てみましょう。
サンプルコード①:必須チェック
コードの読み解き
・$errors
→ エラーメッセージを入れる配列
・$username === ”
→ 空文字かどうかをチェック
・エラーがあれば配列に追加
・最後にまとめて表示
この形が、
PHPバリデーションの基本形 です。
なぜ empty() ではなく === ” を使うのか
empty() は便利ですが、
・0
・’0′
なども「空」と判定します。
そのため、
文字入力の必須チェックでは
空文字かどうかを明示的に確認
する方が安全です。
複数項目のバリデーション
実際のフォームでは、
複数の入力項目を扱います。
サンプルコード②:複数項目チェック
文字数チェックの基本
次に、
文字数をチェックする例です。
サンプルコード③:文字数チェック
ポイント
・mb_strlen
→ 日本語を含めた文字数を正しく数える
・文字数制限は実務で非常によく使われる
バリデーションは「処理の入口」で行う
重要な考え方です。
・データを使う前
・保存する前
・表示する前
必ず最初にバリデーションを行う
ことで、処理が安定します。
バリデーションとセキュリティは別物
ここは混同しやすいポイントです。
・バリデーション
→ 入力が正しいか
・セキュリティ対策(XSSなど)
→ 安全に表示できるか
バリデーションをしていても、
セキュリティ対策は必須 です。
初心者がよくやるミス
バリデーションで多いミスです。
・エラーが1つしか表示できない
・チェックせずに処理を進める
・入力値を直接信用する
「まずチェックする」
という順序を必ず守りましょう。
まとめ
この記事では、
PHPでのバリデーションについて、
・入力チェックの役割
・エラーを配列で管理する理由
・必須・文字数チェックの実装
を学びました。
ここまでできるようになると、
フォーム処理は
実務レベルに一段近づきます。
次に読むべき記事
▶ 次の記事
6-10 XSSとは?なぜ危険なのか



コメント