PHP フォーム - 必須項目の設定
1. PHP における必須項目の概要
本章では、入力フィールドを「必須(Required)」にする方法と、必要に応じてエラーメッセージを作成する方法について解説します。
前章のバリデーションルール表を確認すると、「名前(Name)」「メールアドレス(E-mail)」「性別(Gender)」のフィールドが必須となっていることがわかります。これらのフィールドは空(Empty)にすることはできず、HTML フォーム内で必ず入力・選択されなければなりません。
| フィールド | バリデーションルール |
|---|---|
| 名前 (Name) | 必須。文字と空白のみ許可。 |
| メールアドレス (E-mail) | 必須。有効なメール形式であること(@ と . を含む)。 |
| ウェブサイト (Website) | 任意。入力がある場合は有効な URL であること。 |
| コメント (Comment) | 任意。複数行入力フィールド(textarea)。 |
| 性別 (Gender) | 必須。いずれか一つを選択。 |
前章ではすべての入力フィールドが任意(Optional)でしたが、今回はこれらに制限を加えていきます。
2. バリデーションロジックの実装
以下のコードでは、新しく $nameErr、$emailErr、$genderErr、$websiteErr という変数を用意しました。これらのエラー用変数は、必須項目が未入力の場合にエラーメッセージを保持するために使用します。
また、各 $_POST 変数に対して if else 文を追加しました。これは PHP の empty() 関数を使用して、$_POST 変数が空かどうかをチェックするものです。もし空であれば各エラー変数にメッセージを格納し、空でなければユーザーの入力データを test_input() 関数に渡してサニタイズ処理を行います。
PHP ロジックの例:
<?php
// 変数を定義し、空の値をセット
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 名前のバリデーション
if (empty($_POST["name"])) {
$nameErr = "名前は必須項目です";
} else {
$name = test_input($_POST["name"]);
}
// メールのバリデーション
if (empty($_POST["email"])) {
$emailErr = "メールアドレスは必須項目です";
} else {
$email = test_input($_POST["email"]);
}
// ウェブサイトのバリデーション(任意)
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}
// コメントのバリデーション(任意)
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
// 性別のバリデーション
if (empty($_POST["gender"])) {
$genderErr = "性別の選択は必須です";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>3. エラーメッセージの表示
次に、HTML フォーム内の各必須項目の後に、小さなスクリプトを追加します。これにより、ユーザーが必須項目を入力せずにフォームを送信しようとした場合、適切なエラーメッセージが動的に生成・表示されるようになります。
HTML フォームの実装例:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名前: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
メールアドレス: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
ウェブサイト: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
コメント: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
性別:
<input type="radio" name="gender" value="female">女性
<input type="radio" name="gender" value="male">男性
<input type="radio" name="gender" value="other">その他
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="送信">
</form>この実装により、サーバーサイドでのバリデーション結果がフロントエンドの UI に直接反映されるようになります。class="error" を指定した <span> タグに CSS で赤色などのスタイルを適用することで、ユーザーに視覚的にエラーを通知するのが一般的な手法です。