#はじめに
今回は入力フォームにバリデーションをかけて、エラーメッセージを表示させる方法を簡単にまとめてみます。
かなりざっくりですのであらかじめご了承ください
#今回行う実装
今回行う実装は、名前が空or21文字以上入力された場合にエラーメッセージを表示させていきます。
バリデーションに関する関数は以下です。
validation.php
<?php
function validation($request){//$?POST連想配列
$errors=[];
if (empty($request['your_name']) || 20 < mb_strlen($request['your_name'])){
$errors[]='氏名は必須です、20文字以内で入力してください';
return $errors;
}
}
?>
この関数はとても単純です。
if文によって、引数の文字列が空あるいは21文字以上だった場合に、エラー文配列に、エラー文を格納してそのエラー文配列を返します。
エラー文配列はindex.phpの11行目で定義しています。
index.php
<?php
session_start();
require "validation.php";
header('X-FRAME-OPTIONS:DENY');
function h($str){
return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
$pageFlag=0;
$errors=validation($_POST); //ここでエラー文配列を作成している!!!
if(!empty($_POST['btn_confirm']) && empty($errors)){
$pageFlag=1;
}
if(!empty($_POST['btn_submit'])){
$pageFlag=2;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php if($pageFlag===0):?>
<?php
if(!isset($_SESSION['csrfToken'])){
$csrfToken=bin2hex(random_bytes(32));
$_SESSION['csrfToken']=$csrfToken;
}
$token=$_SESSION['csrfToken'];
?>
<?php if(!empty($errors) && !empty($_POST['btn_conform'])) : ?>
<?php echo '<ul>' ;?>
<?php
foreach($errors as $error){
echo '<li>' . $error . '</li>' ;
}
?>
<?php echo '</ul>';?>
<?php endif;?>
<form method="POST" action="index.php">
名前
<input type="text" name="your_name" value="<?php if(!empty($_POST['your_name'])){echo h($_POST['your_name']);}?>">
<br>
メールアドレス
<input type="email" name="email" value="<?php if(!empty($_POST['email'])){echo h($_POST['email']);}?>">
<br>
<input type="hidden" name=csrf value="<?php echo $token;?>">
<input type="submit" name="btn_confirm" value="確認する">
</form>
<?php endif; ?>
<?php if($pageFlag===1) :?>
<?php if($_POST['csrf']===$_SESSION['csrfToken']) :?>
<form method="POST" action="index.php">
名前
<?php echo h($_POST['your_name']);?>
<br>
メールアドレス
<?php echo h($_POST['email']);?>
<br>
<input type="submit" name="btn_submit" value="送信する">
<input type="submit" name="back" value="戻る ">
<input type="hidden" name="your_name" value="<?php echo h($_POST['your_name']);?>">
<input type="hidden" name="email" value="<?php echo h($_POST['email']);?>">
<input type="hidden" name="csrf" value="<?php echo h($_POST['csrf']);?>">
</form>
<?php endif; ?>
<?php endif; ?>
<?php if($pageFlag===2):?>
<?php if($_POST['csrf']===$_SESSION['csrfToken']) :?>
送信が完了しました
<?php unset($_SESSION['csrfToken']);?>
<?php endif;?>
<?php endif;?>
</body>
</html>
また、エラー文の表示については以下の部分で表現しています。
<?php if(!empty($errors) && !empty($_POST['btn_conform'])) : ?>
<?php echo '<ul>' ;?>
<?php
foreach($errors as $error){
echo '<li>' . $error . '</li>' ;
}
?>
<?php echo '</ul>';?>
<?php endif;?>
今回は、あくまで名前入力のみでしたが実際はもっとたくさんのフォームに対してバリデーションをかけることから、リストでの表示をしています。
#おわりに
以上、かなり簡単にバリデーションについてまとめました。
他にも、filter_varメソッドなどもありますので、バリデーションについてもっと学びを深めていこうと思います!