php
1<?php 2// フォームからデータが送信されているか? 3if (isset($_GET["w"]) && isset($_GET["h"])) { 4 // データが送信されていればBMIを計算 5 $w = floatval($_GET["w"]); // 体重(kg) 6 $h = floatval($_GET["h"]); // 身長(cm) 7 $bmi = $w / pow($h / 100, 2); // BMI値を計算 8 $per = floor(($bmi / 22) * 100); // 肥満率を計算 9 // 結果を表示 10 echo "体重{$w}kg,身長{$h}cm<br/>"; 11 echo "BMIは{$bmi}<br/>"; 12 echo "肥満度は{$per}%です。"; 13} else { 14 // データが送信されてないので、フォームを表示 15 echo "<form>"; 16 echo "身長:<input type='text' name='h'> cm <br/>"; 17 echo "体重:<input type='text' name='w'> kg <br/>"; 18 echo "<input type='submit' value='BMI判定'>"; 19 echo "</form>"; 20}
上記は身長と体重を入力して送信すると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"]))
は、結局「(数値が入力されたか否かに関わらず)送信ボタンが押されたら」と同じことになるでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。