こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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>

投稿日時 - 2009-04-09 13:38:50

QNo.4865407

困ってます

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

$_POSTの内容ですから、入力がなかった場合は空文字列です。

<?php
$tmp = "";

if(is_null($tmp)){
print 'true';
}else{
print 'false';
}

print "\n";
?>

でテストすると答はfalseですから、「空文字列はNULLではない」という事になります。

(通常、プログラムの世界では空文字列は「終了文字」を含む1バイトの長さのれっきとしたデータである事が多いです。)


「入力がされていない事」を確認するならempty関数の方を使う事をお奨めします。

参考URL:http://www.php.net/manual/ja/function.empty.php

投稿日時 - 2009-04-14 16:59:12

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

http://jp2.php.net/manual/ja/language.types.null.php#language.types.null.syntax
---------------抜粋
変数を null にキャストすると、 その変数を削除して値の設定を解除します。
---------------


ええと、問題点が有るとするなら
「0文字が格納された文字列」の可能性があるって事かな。
NULLは「変数が無い」であって、「何も無いが保存されている変数」とは異なるって話。
試しにnull strings「""」で試したらどうなる?

投稿日時 - 2009-04-09 14:31:58

ANo.1

NULLじゃなくて、長さ0の文字列だからでしょう。

投稿日時 - 2009-04-09 14:29:38

あなたにオススメの質問