【サクッと解説】PHP フォームの多項目バリデーション実装例

目次

1. 本記事のポイント

  • PHPで複数入力項目のバリデーションを行う方法を紹介
  • サーバーサイドでの安全なチェック処理の実装例を記載
  • 実務で使える構造化されたバリデーション処理を解説

2. PHPフォームの多項目バリデーションとは?

Webフォームでは、名前・メールアドレス・パスワードなど複数項目の入力を一括して受け取るのが一般的です。それぞれの項目に対し、空欄チェックやフォーマット検証を行う必要があります。

このような入力値の検証処理を「バリデーション」と呼びます。クライアント側(JavaScript)での検証もありますが、信頼性確保のためには必ずサーバー側(PHP)でのバリデーションも必要です。

実務では、入力項目ごとに異なるルール(例:メール形式、文字数制限、数値チェックなど)を一括して処理するために、配列やルール定義による柔軟な設計が求められます。

本記事では、複数項目を安全にチェックし、エラーメッセージを集約して表示する基本的な方法を紹介します。

3. 詳細解説

シンプルな多項目バリデーションの例

以下は、名前・メール・年齢を対象にした基本的なバリデーションの例です。

PHP
<?php
// 入力データを想定(通常は $_POST を使用)
$data = [
    'name' => '',
    'email' => 'test@example',
    'age' => 'abc'
];

$errors = [];

// name: 未入力チェック
if (empty($data['name'])) {
    $errors['name'] = '名前は必須です';
}

// email: 形式チェック
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = 'メールアドレスの形式が不正です';
}

// age: 数値かどうかチェック
if (!ctype_digit($data['age'])) {
    $errors['age'] = '年齢は整数で入力してください';
}

print_r($errors);

出力例:

PHP
Array
(
    [name] => 名前は必須です
    [email] => メールアドレスの形式が不正です
    [age] => 年齢は整数で入力してください
)

このように、項目ごとのルールに応じて個別にチェックし、エラーを配列で管理する構成が基本となります。

構造化されたルール定義による柔軟な設計

より実務的には、ルールを配列で定義して動的にバリデーションを適用する設計が好まれます。

PHP
<?php
$rules = [
    'name' => ['required'],
    'email' => ['required', 'email'],
    'age' => ['required', 'integer']
];

$data = [
    'name' => '',
    'email' => 'abc@',
    'age' => '20a'
];

$errors = [];

foreach ($rules as $field => $ruleList) {
    $value = $data[$field] ?? '';

    foreach ($ruleList as $rule) {
        if ($rule === 'required' && $value === '') {
            $errors[$field] = '必須項目です';
            break;
        }

        if ($rule === 'email' && !filter_var($value, FILTER_VALIDATE_EMAIL)) {
            $errors[$field] = 'メール形式が不正です';
            break;
        }

        if ($rule === 'integer' && !ctype_digit($value)) {
            $errors[$field] = '整数で入力してください';
            break;
        }
    }
}

print_r($errors);

この方法ではルールが分離されているため、再利用性や拡張性に優れています。

4. よくあるミス・誤解・落とし穴

  • filter_varの型変換に注意FILTER_VALIDATE_INTは数値文字列でなく数値型と判定されるため、入力が”20″のような文字列ではfalseになります。
  • 未定義キーの扱い$_POST['key']のように直接アクセスすると、未定義で警告が出ることがあります。??(null合体演算子)を使うと安全です。
  • 多言語対応:エラーメッセージの文言を直書きすると多言語化が困難になります。実務ではテンプレート化を検討すべきです。

5. まとめ

PHPでの多項目バリデーションは、ルール定義とチェック処理の分離により柔軟な設計が可能です。

filter_varやctype_digitなど標準関数を活用しつつ、未定義キーや出力形式にも注意が必要です。実務ではルールの管理性とメッセージの再利用性が重要な観点になります。

よかったらシェアしてね!
  • URLをコピーしました!
目次