入力チェックを行って、予期せぬ動作を未然に防ごう
バリデーションとは
バリデーションとは入力された値が期待した値かチェックすること
期待する値の条件
- 値が入力されているか
- 文字列長は適当な範囲か
- 数値が入力されているか
- 数値は適切な範囲の値か
- 選択肢から選ばれた値か
- 書式が正しいか(メールアドレス、電話番号など)
バリデーションの基本形
<?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)
コメント