第44回: バリデーション — 不正値を入口で止めるデータ品質の防波堤

章: 第5章: Web・DB・セキュリティ

バリデーションを後回しにしていませんか?後でまとめてチェックするほど、処理が複雑になっていきます。

問題と解決策

「とりあえず受け取って、後で確認する」という設計では、DBに不正値が入り込んだり、後続処理でエラーが発生したりします。しかも発生箇所がコードの深い部分になるほど、原因特定が難しくなります。

入口(フォーム受け取り直後)でバリデーションを行い、不正な値は即座に弾く設計が理想です。PHPには filter_var() という組み込み関数があり、メール・URL・整数など典型的な形式を手軽に検証できます。

バリデーション手段の比較

手段 適した用途 備考
filter_var($v, FILTER_VALIDATE_EMAIL) メールアドレス検証 PHP組み込み
filter_var($v, FILTER_VALIDATE_INT) 整数検証 範囲指定も可能
preg_match('/正規表現/', $v) カスタムパターン 郵便番号・電話番号等
ライブラリ(Respect/Validation等) 複合ルール 大規模向け

チェックポイント: バリデーションエラーが発生したとき、ユーザーにわかりやすいエラーメッセージを返していますか?「入力が不正です」だけでは再入力の助けになりません。

コードサンプル


<?php
$email = $_POST['email'] ?? '';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo 'メール形式が不正です';
}

まとめ & 次のステップ

  • 入力値は受け取り直後に検証し、不正値を早期に弾きましょう
  • filter_var() でメール・URL・整数など典型的な形式を手軽に検証できます
  • 複雑なルールは preg_match() や専用ライブラリを活用します
  • エラーメッセージは具体的に伝えることで、ユーザー体験が大きく向上します

次回は セッション — HTTPのステートレス性を超えてログイン状態を保持する仕組みを学びます。

Related Articles