PHP 速習チュートリアル

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 で赤色などのスタイルを適用することで、ユーザーに視覚的にエラーを通知するのが一般的な手法です。