- ベストアンサー
if の入れ子で期待した結果が得られません
初心者です教えて下さい。 if の中の if が null なのに not null になってしまいます なぜでしょうか? よろしくお願いします。 http://psychesine.my-sv.net/phpTest.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> </head> <body> <form method="post" action="phpTest.php"> <p> Email<input type="radio" name="type" value="email"> UserName<input type="radio" name="type" value="userName"> </p> <table> <table> <tr><td>Email</td><td><input type="text" name="email" value="<?php print(htmlspecialchars($_POST['email'])); ?>" /></td></tr> <tr><td>UserName</td><td><input type="text" name="userName" value="<?php print(htmlspecialchars($_POST['userName'])); ?>" /></td></tr> </table> <input type="submit" value="検索" /> </form> <?php if ( 0 == strcmp( $_POST['type'], 'email' ) ) { if ( is_null($_POST['email']) ) { echo 'email is null'; } else { echo 'email is not null'; } } if ( 0 == strcmp( $_POST['type'], 'userName' ) ) { if ( is_null($_POST['userName']) ) { echo 'userName is null'; } else { echo 'userName is not null'; } } ?> </body> </html>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$_POSTの内容ですから、入力がなかった場合は空文字列です。 <?php $tmp = ""; if(is_null($tmp)){ print 'true'; }else{ print 'false'; } print "\n"; ?> でテストすると答はfalseですから、「空文字列はNULLではない」という事になります。 (通常、プログラムの世界では空文字列は「終了文字」を含む1バイトの長さのれっきとしたデータである事が多いです。) 「入力がされていない事」を確認するならempty関数の方を使う事をお奨めします。
その他の回答 (2)
- SAYKA
- ベストアンサー率34% (944/2776)
http://jp2.php.net/manual/ja/language.types.null.php#language.types.null.syntax ---------------抜粋 変数を null にキャストすると、 その変数を削除して値の設定を解除します。 --------------- ええと、問題点が有るとするなら 「0文字が格納された文字列」の可能性があるって事かな。 NULLは「変数が無い」であって、「何も無いが保存されている変数」とは異なるって話。 試しにnull strings「""」で試したらどうなる?
- superside0
- ベストアンサー率64% (463/719)
NULLじゃなくて、長さ0の文字列だからでしょう。