質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5867閲覧

isset関数の引数に$_GET['']を持ってきたときに動作について

pato

総合スコア32

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/08/09 06:43

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"]))
は、結局「(数値が入力されたか否かに関わらず)送信ボタンが押されたら」と同じことになるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

空文字("")だと思います。
formのmethodがGETだとすると、
submitした際のURLが
\php_practice_1.php?w=&h=
となると思いますが、
・パラメータ自体は存在する
・値が存在しない(=値は"")
ということで空文字("")です。

一方、パラメータ自体が存在しない場合
\php_practice_1.php
はissetはfalseを返すと思います。

投稿2015/08/09 06:52

TetsuyaZama

総合スコア216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

TetsuyaZama様がおっしゃる通り、そのソースコードでGETパラメータですと「空の値が存在する」となり、issetはtrueを返します。
まあPOST使った方がいいとは思いますが、そのままいくならissetを!emptyに変えれば多分問題は解決するかなぁと。

投稿2015/08/09 10:17

yu-ri

総合スコア634

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問