1. 本記事のポイント
- PHPでの入力値の必須チェックや空判定に使われる構文の違いと用途を整理
isset()
・empty()
・is_null()
の違いと注意点を明確化- フォーム処理などでの実務的な使い分け指針を提示
2. PHPの入力値の必須チェックと空判定処理とは?
PHPでは、ユーザー入力を受け取った際に「入力があるか」「値が空でないか」を判定する処理が必要です。これはセキュリティや業務ロジックの観点からも重要な前処理にあたります。
たとえば、フォーム送信された値をサーバー側でバリデーションする際、「未入力」や「空文字」の状態を正しく判定できないと、想定外の挙動やバグの原因になります。
このような入力チェックでは主に isset()
、empty()
、is_null()
、場合によっては filter_input()
といった関数が利用されます。ただし、それぞれの関数が判定する条件は微妙に異なるため、誤用するとバグを引き起こすリスクがあります。
本記事では、それぞれの構文の仕様と違い、実務における適切な使い方を整理します。
3. 詳細解説
フォームの入力値が送信されたかどうかの判定には isset()
POSTデータが存在するかを判定する際には isset()
がよく使われます。
// フォームからの入力が存在するかチェック
if (isset($_POST['username'])) {
echo 'ユーザー名が送信されました';
} else {
echo 'ユーザー名は未送信です';
}
isset()
は、変数が未定義または null
の場合に false を返します。空文字や0はtrue扱いになるため、「値が空かどうか」ではなく「存在するか」をチェックするのに適しています。
空値も含めて入力の有無をチェックしたいなら empty()
ユーザーが値を入力したかを確認する場合は empty()
を使います。
// 空判定の例(0や空文字はfalse扱い)
if (empty($_POST['email'])) {
echo 'メールアドレスが入力されていません';
} else {
echo 'メールアドレスが入力されました';
}
empty()
は、空文字・0・”0″・null・false・空配列などをすべて false として扱います。「意味のある値が入っているか」を判定するのに適しています。
厳密にnullのみを検出したいなら is_null()
変数が null
かどうかを厳密にチェックしたい場合は is_null()
を使います。
$value = null;
if (is_null($value)) {
echo '値はnullです';
} else {
echo 'nullではありません';
}
この関数は「値がセットされていて、かつnull」であることを確認するため、未定義変数を渡すと警告が出る点に注意が必要です。
フィルタとバリデーションを同時に行う filter_input()
外部入力値に対して、存在チェックとフィルタを同時に行いたい場合は filter_input()
が有効です。
// 入力が存在して、かつ空でないことを確認
$username = filter_input(INPUT_POST, 'username', FILTER_DEFAULT);
if ($username === null) {
echo '入力が存在しません';
} elseif ($username === '') {
echo '空文字が入力されました';
} else {
echo "入力されたユーザー名: $username";
}
このように、外部入力のチェックには isset()
だけでなく、状況に応じて empty()
や filter_input()
を組み合わせるのが一般的です。
4. よくあるミス・誤解・落とし穴
empty()
は0を「空」と見なす
empty(0)
はtrueを返すため、数値の0が有効な入力値の場合には不適切です。このようなケースでは trim()
や === ''
と組み合わせて判定することが必要です。
isset()
だけでは空文字を弾けない
変数が定義されているかだけをチェックする isset()
は、空文字や0もtrueと判定するため、実質的に未入力を検出できません。
is_null()
は未定義変数に使うと警告が出る
is_null()
は変数が存在していることが前提です。存在チェックを伴わない使用は、Noticeレベルのエラーにつながります。
filter_input()
の戻り値に注意
filter_input()
は、対象のキーが存在しなければ null、存在しても空なら空文字を返します。この2つを区別することで、フォームの「未送信」と「空入力」の判定を明確にできます。
5. まとめ
- 入力値の存在確認は
isset()
、内容チェックはempty()
を使い分ける - nullだけを検出したいときは
is_null()
を使う(未定義変数には注意) - 実務では
filter_input()
と組み合わせて、送信と空文字を明確に判別する設計が推奨される - 特にフォーム処理では、0や空文字を正しく扱えるよう条件分岐を設計することが重要