0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Php】validationについて-2

Posted at

初めに

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

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?