Skip to content

Instantly share code, notes, and snippets.

@KimiyukiYamauchi
Last active December 28, 2015 04:58
Show Gist options
  • Save KimiyukiYamauchi/7446033 to your computer and use it in GitHub Desktop.
Save KimiyukiYamauchi/7446033 to your computer and use it in GitHub Desktop.
BMI値を計算する
<?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