6-9 PHPのバリデーションとは何か

Web開発学習ロードマップ

前の記事では、
HTMLフォームから送信されたデータを
PHPで 受け取って表示する ところまで進みました。

しかし、
「受け取れる」だけでは
Webアプリケーションとしては不十分です。

・未入力のまま送信されていないか
・想定外の値が入っていないか
・そのまま処理しても問題ないか

これらをチェックする処理が、
バリデーション(入力チェック) です。

この記事では、
PHPでバリデーションを行うための
考え方と最小実装
コード付きで解説します。


この記事で学べること

・バリデーションとは何か
・なぜバリデーションが必要なのか
・必須入力チェックの実装方法
・エラーメッセージの管理方法
・フォーム処理での基本パターン


バリデーションとは何か

バリデーションとは、
入力されたデータが正しいかどうかを確認する処理 です。

「正しい」とは、

・空でない
・形式が合っている
・想定した範囲内である

といった条件を満たしていることを指します。


なぜバリデーションが必要なのか

バリデーションを行わないと、
次のような問題が起こります。

・未入力データが保存される
・処理の途中でエラーが起きる
・想定外の値で不具合が起こる

また、
ユーザーは必ずしも
正しく入力してくれるとは限らない
という前提で考える必要があります。


バリデーションの基本的な考え方

PHPでのバリデーションは、
次の流れで考えると分かりやすくなります。

  1. 入力データを受け取る

  2. 条件に合っているか確認する

  3. 問題があればエラーを保存する

  4. 問題がなければ次の処理へ進む


エラーは配列で管理する

バリデーションでは、
エラーメッセージを配列で管理 するのが基本です。

理由は、

・複数のエラーを同時に扱える
・後で表示方法を変えやすい
・処理の流れが整理される

からです。


必須入力チェックの基本

まずは、
最も基本的な必須入力チェック を見てみましょう。

サンプルコード①:必須チェック

<?php
$errors = [];

$username = $_POST['username'] ?? '';

if ($username === '') {
  $errors[] = '名前を入力してください';
}

if (empty($errors)) {
  echo '処理を続行します';
} else {
  foreach ($errors as $error) {
    echo $error . '<br>';
  }
}

コードの読み解き

・$errors
 → エラーメッセージを入れる配列
・$username === ”
 → 空文字かどうかをチェック
・エラーがあれば配列に追加
・最後にまとめて表示

この形が、
PHPバリデーションの基本形 です。


なぜ empty() ではなく === ” を使うのか

empty() は便利ですが、

・0
・’0′

なども「空」と判定します。

そのため、
文字入力の必須チェックでは
空文字かどうかを明示的に確認
する方が安全です。


複数項目のバリデーション

実際のフォームでは、
複数の入力項目を扱います。

サンプルコード②:複数項目チェック

<?php
$errors = [];

$name  = $_POST['name']  ?? '';
$email = $_POST['email'] ?? '';

if ($name === '') {
  $errors[] = '名前を入力してください';
}

if ($email === '') {
  $errors[] = 'メールアドレスを入力してください';
}

if (empty($errors)) {
  echo 'すべての入力が正しいです';
} else {
  foreach ($errors as $error) {
    echo $error . '<br>';
  }
}

文字数チェックの基本

次に、
文字数をチェックする例です。

サンプルコード③:文字数チェック

<?php
$name = $_POST['name'] ?? '';
$errors = [];

if (mb_strlen($name) > 20) {
  $errors[] = '名前は20文字以内で入力してください';
}

ポイント

・mb_strlen
 → 日本語を含めた文字数を正しく数える
・文字数制限は実務で非常によく使われる


バリデーションは「処理の入口」で行う

重要な考え方です。

・データを使う前
・保存する前
・表示する前

必ず最初にバリデーションを行う
ことで、処理が安定します。


バリデーションとセキュリティは別物

ここは混同しやすいポイントです。

・バリデーション
 → 入力が正しいか
・セキュリティ対策(XSSなど)
 → 安全に表示できるか

バリデーションをしていても、
セキュリティ対策は必須 です。


初心者がよくやるミス

バリデーションで多いミスです。

・エラーが1つしか表示できない
・チェックせずに処理を進める
・入力値を直接信用する

「まずチェックする」
という順序を必ず守りましょう。


まとめ

この記事では、
PHPでのバリデーションについて、

・入力チェックの役割
・エラーを配列で管理する理由
・必須・文字数チェックの実装

を学びました。

ここまでできるようになると、
フォーム処理は
実務レベルに一段近づきます


次に読むべき記事

▶ 次の記事
6-10 XSSとは?なぜ危険なのか

▶ 関連記事
6-8 PHPでフォームデータを受け取って表示する

コメント