[PHP]バリデーション処理をしたい

プログラミング

入力チェックを行って、予期せぬ動作を未然に防ごう

バリデーションとは

バリデーションとは入力された値が期待した値かチェックすること

期待する値の条件

  • 値が入力されているか
  • 文字列長は適当な範囲か
  • 数値が入力されているか
  • 数値は適切な範囲の値か
  • 選択肢から選ばれた値か
  • 書式が正しいか(メールアドレス、電話番号など)

バリデーションの基本形

<?php
function validate ($name) { #バリデーションメソッドを用意
$errors = [];
if (strlen($name)) {        # $nameが未入力だったら
  $errors['name'] = '社名を入力してください';
} elseif (strlen($name) > 100 ) { # $nameが100文字より多かったら
  $errors['name'] = '社名は100文字以内で入力してください';
}
  return $errors;                 # エラー変数を返す
}

$name = trim(fgets(STDIN));
$validated = validate($name);
if (count($validated) > 0 ){      # エラー変数に何か含まれていたら
  foreach ($validated as $error) {
    echo $error . PHP_EOL;            # エラー内容を表示する
  }
  return;                           # 処理を中断する
}
$sql = "INSERT INTO companies('name') VALUES ($name)"; #問題なければ処理続行

論理演算子を使う

! 否定の演算子

!$a  #$aがtrueでない時true

&& 論理積の演算子

$a && $b  #$aも$bもtrueのとき時true

|| 論理和の演算子

$a || $b  #$aか$bのどちらかがtrueのとき時true

文字列を整数に変換しよう

型キャストを使って別の型へ変換しよう

  • (int) : 整数への変換
  • (bool) : 論理値への変換
  • (string) : 文字列への変換

文字列を整数へ変換するなら

$a = '2';
var_dump((int)$a);

// int(2)

dockerのappコンテナで挙動を確認してみよう

$ docker-compose exec app /bin/bash  //bashで実行
/var/www/html# php -a                //インタラクティブモードに入る
Interactive shell

php > $a = '2';
php > var_dump($a);
string(1) "2"       //まずは型キャストする前に型を確認

php > var_dump((int)$a);
int(2)                  //int型へ変換されることが確認できました

php > var_dump((int)3.2);
int(3)                  //小数をint型へ変換すると小数点以下は切り捨ての挙動となる

php > var_dump((int)'hoge');
int(0)                  //文字列をint型へ変換すると0が返ってくる

数値を比較しよう

比較演算子を使って比較することができる

  • $a == $b $aと$bが等しい場合TRUEが返る。型が違う場合はキャストされる
  • $a === $b $aと$bが等しい場合TRUEが返る。型が違う場合はキャストされない。厳密な比較
  • $a != $b $aと$bが等しくない場合TRUEが返る。型が違う場合はキャストされる。
  • $a !==$b $aと$bが等しくない場合TRUEが返る。型が違う場合はキャストされない。厳密な比較
  • $a < $b $aが$bより小さい場合TRUEが返る。
  • $a > $b $aが$bより大きい場合TRUEが返る。
  • $a <= $b $aが$bより等しいか小さい場合TRUEが返る。
  • $a >= $b $aが$bより等しいか大きい場合TRUEが返る。
$ docker-compose exec app /bin/bash  //bashで実行
/var/www/html# php -a                //インタラクティブモードに入る
Interactive shell

php > var_dump(1 < 2);
bool(TRUE)       

php > var_dump(1 > 2);
bool(FALSE)       

php > var_dump(1 == 1);
bool(TRUE)       

php > var_dump(1 === 1);
bool(TRUE)

php > var_dump(1 === '1');
bool(FALSE)

コメント

タイトルとURLをコピーしました