Last active
December 28, 2015 04:58
-
-
Save KimiyukiYamauchi/7446033 to your computer and use it in GitHub Desktop.
BMI値を計算する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function bmi ($height,$mass) | |
{ | |
$height = $height / 100; | |
$mass = $mass / ($height * $height); | |
return $mass; | |
} | |
function h($str) { | |
return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); | |
} | |
function process_form(){ | |
$height = $_POST["height"]; | |
$mass = $_POST["mass"]; | |
$bmi = bmi($height, $mass); | |
$bmi = round($bmi, 1); | |
// 身長○cm、体重○kg | |
print "身長" . $height . "cm、体重" . | |
$mass . "kg<br />"; | |
// あなたのBMI 値は○です | |
if($bmi<18.5){ | |
print "あなたの BMI 値は<div id='slim'>" . h($bmi) . "</div>です "; | |
}else if($bmi>25){ | |
print "あなたの BMI 値は<div id='over'>" . h($bmi) . "</div>です "; | |
}else{ | |
print "あなたの BMI 値は<div id='standard'>" . h($bmi) . "</div>です "; | |
} | |
// 「戻る」リンク | |
print '<br /><a href="' . | |
$_SERVER['SCRIPT_NAME'] . '">戻る</a>'; | |
} | |
function show_form($errors = ''){ | |
if (@$_POST['submit']) { | |
$defaults = $_POST; | |
}else{ | |
$defaults['height'] = ""; | |
$defaults['mass'] = ""; | |
} | |
// 何かエラーが渡されると、それを出力 | |
if($errors){ | |
print '以下のエラーを修正してください:<ul><li>'; | |
print implode('</li><li>', $errors); | |
print '</li></ul>'; | |
} | |
$height = h($defaults['height']); | |
$mass = h($defaults['mass']); | |
print <<<_HTML_ | |
BMI 値を計算します | |
<form action="{$_SERVER['SCRIPT_NAME']}" method="post"> | |
身長 <br> | |
<input type="text" name="height" value="{$height}"><br> | |
体重 <br> | |
<input type="text" name="mass" value="{$mass}"><br> | |
<input type="submit" name="submit" value=" 送信 "><br> | |
</form> | |
_HTML_; | |
} | |
function validate_form(){ | |
// エラーメッセージを空の配列で初期化 | |
$errors = array(); | |
// 身長、体重が入っていなければ | |
// falseを返す | |
$_POST['height'] = trim($_POST['height']); | |
$_POST['mass'] = trim($_POST['mass']); | |
if(strlen($_POST['height'])==0){ | |
// エラーメッセージを追加 | |
$errors[] = "身長を入力してください。"; | |
}else if($_POST['height'] != strval(floatval($_POST['height']))){ | |
$errors[] = "身長を正しく入力してください。"; | |
} | |
if(strlen($_POST['mass'])==0){ | |
// エラーメッセージを追加 | |
$errors[] = "体重を入力してください。"; | |
}else if($_POST['mass'] != strval(floatval($_POST['mass']))){ | |
$errors[] = "体重を正しく入力してください。"; | |
} | |
// エラーメッセージの配列(場合によっては) | |
// 空配列)を返す | |
return $errors; | |
} | |
?> | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<style> | |
#over{ | |
color: red; | |
display: inline; | |
} | |
#slim{ | |
color: blue; | |
display: inline; | |
} | |
#standard{ | |
color: black; | |
display: inline; | |
} | |
</style> | |
</head> | |
<body> | |
<?php | |
if (@$_POST['submit']) { | |
// validate_form()がエラーを返した場合、 | |
// show_form()に渡す | |
if($form_errors = validate_form()){ | |
show_form($form_errors); | |
}else{ | |
process_form(); | |
} | |
} else { | |
show_form(); | |
} | |
?> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment