• ベストアンサー

isset関数の動作と入力チェックについて

issetの動作について疑問に思った事があるので、質問させて下さい。 以下のようなテスト用のphpを作成しました。 issettest.php <?php $a = $_GET["a"]; if(isset($_GET["a"])){ echo "\$GETに[".$_GET["a"]."]が入っています。<br>"; } if(isset($a)){ echo "\$aに[".$a."]が入っています。<br>"; } if(!isset($_GET["a"])){ echo "\$GETは空です。<br>"; } if(!isset($a)){ echo "\$aは空です。<br>"; } ?> ./issettest.php と実行すると、 $GETの値は空です。 $aの値は空です。 ./issettest.php?a=test と実行すると $GETに[test]が入っています。 $aに[test]が入っています。 ./issettest.php?a= と実行すると $GETに[]が入っています。 $aに[]が入っています。 となります。 これがissetの正常な動作なのでしょうか? 例えば、入力フォームを使いGETやPOSTでの値を送信する場合、入力フォームに値が入力されたかどうかを判定するにはissetは使えないのでしょうか? わかりづらい質問で申し訳ありませんが、先輩方の回答お待ちしています。 質問に不備などありましたらご指摘下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>これがissetの正常な動作なのでしょうか? issetは値が入っているかどうか調べる関数ではありませんのでいたって正常です。 こんな感じでチェックしてみては? if(isset($a) and $a!=="") print "OK";

jtam
質問者

お礼

お返事ありがとうございます。 根本的に勘違いしてしまっていたのですね・・・。 チェック方法についても教えていただきありがとう御座います。 また何かありましたら宜しくお願いします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#2さんのempty()は、 ""、false、0、"0"、NULL・・・などすべてを拡大解釈して emptyと判断してしまいますね・・・

jtam
質問者

お礼

お返事ありがとうございます。 empty関数について自分でも色々調べて使えそうな所で使ってみます。 別の回答ではソースありがとうございました。 また宜しくお願いします。

回答No.2

isset()は変数が定義されているかを判定するための関数なので 未入力チェックには使えません。 この場合はempty()を使えばいいと思います。 $a = ''; if (empty($a)) { echo '未入力です。'; } else { echo '入力されています。'; } 上記の実行結果は「未入力です。」となります。

jtam
質問者

お礼

お返事ありがとうございます。 empty関数、便利そうですね。 助かりました。 また何かありましたら宜しくお願いします。

関連するQ&A