未入力チェック(比較演算子の続き)

こないだの比較演算子の話の続き。
PHPは横着しすぎるとひどい目にあうので気をつけましょうねという話です。

<?php
if (!$_REQUEST['param1']) {
  echo "未入力だよ";
}

これの何がマズイか?というと入力値に"0"を入力した場合も、未入力になってしまうんです。論理演算子の"!"は、false, ""(空文字)、0, "0", array() これらが反応するんですね。
何が困るかっていうと、例えばメールの入力が任意の場合に、"0"と入力された場合に、未入力のまま扱われてしまうけど、DBにそのまま"0"が登録されてしまう可能性があるんですね。未入力の扱いのままなので、メールアドレスのバリデーションも通らない。これで仮にメールを利用するようなシステムだと、送信エラーになってしまう。

フレームワークで提供されているような、バリデータを利用するか、空文字と比較したほうが無難ですね。

<?php
if ($_REQUEST['param1'] != "") {
  echo "未入力だよ";
}