初めに
phpのvalidationについて学習した内容のoutput用記事です。
※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。
前回の記事:
https://qiita.com/redrabbit1104/items/a6e57aa1fd1771ef90ff
https://qiita.com/redrabbit1104/items/a3eaf2bba51fac0b3c51
https://qiita.com/redrabbit1104/items/6e9c85c7503ed9043f38
文字数のvalidation
名前の入力フォームから入力された文字数に制限を掛けます。
入力される文字列は日本語であり、バイト数は1文字あたり2バイトになります。このように1文字のバイト数が2バイト以上の文字をマルチバイト文字(multibyte character)と言います。
mb_strlen()関数を利用する
英語の場合、文字列の長さを調べるにはstrlen()関数を利用しますが、日本語やハングルのように1文字が2バイトの場合にはmb_strlen()関数を使います。文字エンコードはデフォルト値がnullであり、省略可能です。
mb_strlen(調べたい文字列, 文字エンコード)
前回作ったvalidation関数に入力文字数の制限をしたいので、mb_strlen関数を使って8文字を超えた場合にはエラーメッセージが出るようにします。また、8文字は1文字あたりのバイト数が2バイトなので、16に直します。
function validation($filter_value)
{ //$_POST 連想配列
$messages = [];
if (
empty($filter_value['input_name']) ||
16 < mb_strlen($filter_value['input_name']) // 追記
) {
$messages[] = '16文字以下の「氏名」を入力してください。'; //修正
}
return $messages;
}
ラジオボタンを追加
入力画面にラジオボタンの項目を追加します。フォームの入力を間違えたりして確認画面から入力画面に戻った時に、チェックした値が残るようにしたいため、phpのif文を使って$_POST['licence']の値が空ではなく(チェック済み)かつ値が0もしくは1だった場合にチェックが入るように指定しておきます。
免許
<input type="radio" name="licence" value="0"
<?php if (!empty($_POST['licence']) && $_POST['licence'] === '0')
{ echo 'checked'; } ?>>あり
<input type="radio" name="licence" value="1"
<?php if (!empty($_POST['licence']) && $_POST['licence'] === '1')
{ echo 'checked';} ?>>なし
また、完了画面に$_POST['licence']の値が0か1かによって「あり」もしくは「なし」が表示されるように記述します。
免許
<?php if ($_POST['licence'] === '0') { echo 'あり'; }
if ($_POST['licence'] === '1') { echo 'なし'; }
?>
合わせて送信ボタンを押した際に、hiddenタイプで$_POST['licence']の値が渡されるように以下を追記します。
<input type="hidden" name="licence" value="<?php echo sp_chars($_POST['licence']); ?>">
ラジオボタンのvalidation
ラジオボタンの場合、「あり」か「なし」かどちらかの値が入っているので、empty関数ではなくisset関数を使います。 これで'licence'の値がセットされていなければ、validationが掛かりメッセージが表示されます。
// 追記
if (!isset($filter_value['licence'])) {
$messages[] = '「免許」のチェックは必須です。';}
参考サイト
https://www.php.net/manual/ja/function.mb-strlen.php
https://www.php.net/manual/ja/function.strlen.php