[PHP]フォームでバリデーションを実装
はじめに
PHPを用いたフォームの実装の際に、バリデーションを行う方法を備忘録のためにまとめておりますが、参考になれば幸いです。
この記事ではフォームでデータを送信してバリデーションを行う記述を紹介しております。送信したデータのデータベース登録などの設定は割愛しておりますので、実装を行いたい際は臨機応変に対応してください。
開発環境
- HTML 5
- PHP 7.4.9
コード
<?php
require 'validation.php';
$errors = validation($_POST);
?>
<!DOCTYPE html>
...
<body>
<?php if(!empty($errors)): ?>
<?php echo '<ul>'; ?>
<?php
foreach ($errors as $error) {
echo '<li>' . $error . '</li>';
}
?>
<?php echo '</ul>'; ?>
<?php endif ?>
<form action="" method="POST">
<p>氏名<input type="text" name="name">
<p>年齢<input type="number" name="age">
<input type="submit">
</form>
</body>
</html>
<?php
function validation($request) {
$errors = [];
if (empty($request['name'])) {
$errors[] = '氏名は必須です。';
}
if (empty($request['age'])) {
$errors[] = '年齢は必須です。';
}
return $errors;
}
?>
コードの説明
index.php
- 2行目
- validation.phpというファイルの設定をindex.php内で使用できるようにする記述
- 3行目
- validationメソッドを実行
- バリデーションにかかった場合はエラーメッセージを取得できるので、変数errorsで保持しておく
- 10〜18行目
- 3行目で取得した変数errorsにエラーメッセージが入っている場合の処理
- 13行目は拡張for文という繰り返し処理を行う記述
- 変数errorsに入っているエラーメッセージを変数errorという単数形の変数に代入して、echoで表示する
- 補足ですが、10〜18行目の記述はindex.phpを読み込んだ際に表示されます。本来は一度formで情報を投稿しエラーがあった際のみ表示すべき記述です。今回はコードが複雑になるため本来の実装方法は行いませんが、if文で囲むことで本来の実装が可能です。
- 20〜24行目
- 一般的なformを準備
- 氏名と年齢を入力必須項目と想定
validation.php
- 2行目
- validationという名前と年齢が入力されているかチェックするメソッドを定義
- 引数の($request)の名前は任意で可能
- 引数の($request)の中にはindex.phpで送信した氏名と年齢のデータが格納されている
- 3行目
- バリデーションにかかった際に表示するエラーメッセージを入れておくerrorsという変数を準備しておく(この時の中身は空です)
- 5〜11行目
- 5行目は ($request[‘name’])で送られてきたデータである氏名を取得しています
- emptyは引数(今回の場合は上記の氏名)の中身が空か確認するメソッドで、中身が空だった場合(氏名が入力されていなかった場合)は6行目の処理を行います。
- 6行目は氏名が入力されていなかった時の処理のため、3行目で準備したerrorsという変数にエラーメッセージを代入する
- 9〜11行目も上記の氏名と同じように入力されているか確認して、入力されていなかった場合はエラーメッセージをerrorsという変数に代入する
- 13行目
- バリデーションを行った結果であるerrorsという変数をindex.phpに渡す
- 氏名と年齢の両方が入力されていた場合は、errorsという変数の中身は空(エラーメッセージがない状態)になります
さいごに
今回はformで送信したデータに対しバリデーションを行う機能を紹介しました。バリデーションを行うだけの処理のため、データベースに登録したい時は臨機応変に対応してみてください。また、あくまで参考としてご活用していただけると幸いです。