章: 第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のステートレス性を超えてログイン状態を保持する仕組みを学びます。