- 締切済み
リクエストメソッド
以下はPHPでBMIを計算するプログラムです。リクエストメソッドを取得する意味がよくわかりません。 $request_method = $_SERVER['REQUEST_METHOD']; の部分です。 <?php // 初期化 $height = ''; $weight = ''; $bmi = ''; $err_msg = array(); // エラーメッセージ用の配列 // リクエストメソッドを取得する $request_method = $_SERVER['REQUEST_METHOD']; // 「BMI計算」ボタンをクリックした(POSTされた)場合に処理する if ($request_method === 'POST') { // POSTデータを取得する $height = get_post_data('height'); $weight = get_post_data('weight'); // 身長の値が数値かどうかをチェックする if (is_numeric($height) === FALSE) { $err_msg[] = '身長は数値を入力してください'; } // 体重の値が数値かどうかをチェックする if (is_numeric($weight) === FALSE) { $err_msg[] = '体重は数値を入力してください'; } // エラーがない場合にBMIを算出する if (count($err_msg) === 0) { // BMIを算出する $bmi = calc_bmi($height, $weight); } } /** * BMIを計算する * @param mixed $height 身長(cm) * @param mixed $weight 体重(kg) * @return float 計算したBMIの値を返す */ function calc_bmi($height, $weight) { return round($weight/($height/100*$height/100),1); } /** * POSTデータを取得する * @param str $key 配列キー * @return str POSTの値 */ function get_post_data($key) { $str = ''; if (isset($_POST[$key]) === TRUE) { $str = $_POST[$key]; } return $str; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>BMI計算</title> </head> <body> <h1>BMI計算</h1> <form method="post"> 身長(cm) : <input type="text" name="height" value="<?php print $height ?>"> 体重(kg) : <input type="text" name="weight" value="<?php print $weight ?>"> <input type="submit" value="BMIを計算する"> </form> <?php if (count($err_msg) > 0) { ?> <?php foreach ($err_msg as $value) { ?> <p><?php print $value; ?></p> <?php } ?> <?php } ?> <?php if ($request_method === 'POST' && count($err_msg) === 0) { ?> <p>あなたのBMIは<?php print $bmi; ?>です</p> <?php } ?> </body> </html>
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>スーパーグローバル変数の部分の理解が曖昧なので本で調べてみます。 そこじゃないです。 1回目と2回目の違いを理解できれば、 上の意味は簡単に理解できますよ。 1回目のコールがGET(ただし意図的にGETしたわけではない) 2回目がコールがPOSTになってるってことに気が付けば、 すぐに理解できるかと。 最初にも書いてますが、 これは、1回目と2回目を区別してるだけですので。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
超簡単です。 続く関数が、 $height = get_post_data('height'); これの本体が、 function get_post_data($key) { $str = ''; if (isset($_POST[$key]) === TRUE) { $str = $_POST[$key]; } return $str; } となっており、POSTしか処理できないからです。 ただし、本当の意味は違います。 POST「前」を検出するためにこのようにしてます。 最初の1回目はFORMを表示してる段階でPOSTは ありませんから、その時どうするか?を この判定で行っているんです。 質問者さん、過去数回の質問でここがわかっていないのは、 見てわかってますが。 1.PHPやHTMLなどからの表示物->ブラウザ。 2.その表示物のFORMを押した時ー>PHPなどCGI/SSI実行 なので、最初は、送信ではなく「受信」からスタートなので、 PHPは最初は「送信物」を持っていないのですよ。
補足
スーパーグローバル変数の部分の理解が曖昧なので本で調べてみます。