質問: ``` "; echo "BMIは{$bmi}"; echo "肥満度は{$per}%です。"; } else { // データが送信されてないので、フォームを表示 echo ""; echo "身長: cm "; echo "体重: kg "; echo ""; echo ""; } ``` 上記は身長と体重を入力して送信するとbmiが計算されて表示されるサンプルで、実際身長・体重を入力して送信すると計算・表示されるのでそこは問題ないのですが、全く数字を入力せずに送信ボタンを押す、あるいはどちらか一方だけ入力して送信ボタンを押した場合もif文の処理が実行されます。(身長を入力しない場合Warning: Division by zero in C:\xampp\htdocs\php_practice_1.php on line 7という警告が出るがその後に計算結果が表示される) ということは数値を入力しなくても送信ボタンを押しただけでisset($_GET["w"]) もisset($_GET["h"])も両方trueを返している、ということになると思います。数値を入力せずに送信ボタンを押した場合、$_GET変数には何が代入されるのでしょうか?nullではないかと思ったのですが、$_GET['w']にnullが入っているならisset($_GET['w'])はfalseを返すのでif文の中身は実行されない(つまり計算結果は表示されない)と思います。ここらへんがはっきりしないので質問させて頂きました。 実行結果からの推測なのですが、上記サンプル中のif文の条件式 (isset($_GET["w"]) && isset($_GET["h"])) は、結局「(数値が入力されたか否かに関わらず)送信ボタンが押されたら」と同じことになるでしょうか?
回答: 空文字("")だと思います。 formのmethodがGETだとすると、 submitした際のURLが \php_practice_1.php?w=&h= となると思いますが、 ・パラメータ自体は存在する ・値が存在しない(=値は"") ということで空文字("")です。 一方、パラメータ自体が存在しない場合 \php_practice_1.php はissetはfalseを返すと思います。