Загрузка данных
<?php
function getZodiac($day, $month)
{
if (($month == 3 && $day >= 21) || ($month == 4 && $day <= 19)) return "Овен";
if (($month == 4 && $day >= 20) || ($month == 5 && $day <= 20)) return "Телец";
if (($month == 5 && $day >= 21) || ($month == 6 && $day <= 20)) return "Близнецы";
if (($month == 6 && $day >= 21) || ($month == 7 && $day <= 22)) return "Рак";
if (($month == 7 && $day >= 23) || ($month == 8 && $day <= 22)) return "Лев";
if (($month == 8 && $day >= 23) || ($month == 9 && $day <= 22)) return "Дева";
if (($month == 9 && $day >= 23) || ($month == 10 && $day <= 22)) return "Весы";
if (($month == 10 && $day >= 23) || ($month == 11 && $day <= 21)) return "Скорпион";
if (($month == 11 && $day >= 22) || ($month == 12 && $day <= 21)) return "Стрелец";
if (($month == 12 && $day >= 22) || ($month == 1 && $day <= 19)) return "Козерог";
if (($month == 1 && $day >= 20) || ($month == 2 && $day <= 18)) return "Водолей";
return "Рыбы";
}
$horoscopes = [
"Овен" => "Сегодня хороший день для новых начинаний.",
"Телец" => "Будьте внимательны к финансам.",
"Близнецы" => "Вас ждёт интересное общение.",
"Рак" => "Уделите время близким.",
"Лев" => "Проявите лидерские качества.",
"Дева" => "День подходит для обучения.",
"Весы" => "Сохраняйте баланс во всём.",
"Скорпион" => "Возможны приятные сюрпризы.",
"Стрелец" => "Не бойтесь новых возможностей.",
"Козерог" => "Труд принесёт результат.",
"Водолей" => "Вас посетят интересные идеи.",
"Рыбы" => "Прислушайтесь к интуиции."
];
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Умный калькулятор здоровья</title>
<style>
body{
font-family: Arial;
margin:20px;
}
table{
border-collapse: collapse;
}
td,th{
border:1px solid black;
padding:5px;
}
</style>
</head>
<body>
<h2>Умный калькулятор здоровья и питания</h2>
<form method="post">
<p>
Имя:<br>
<input type="text" name="name" required>
</p>
<p>
Возраст:<br>
<input type="number" name="age" min="1" max="120" required>
</p>
<p>
Вес (кг):<br>
<input type="number" name="weight" min="30" max="300" required>
</p>
<p>
Рост (см):<br>
<input type="number" name="height" min="100" max="250" required>
</p>
<p>
Пол:<br>
<select name="gender">
<option value="male">Мужской</option>
<option value="female">Женский</option>
</select>
</p>
<p>
Уровень активности:<br>
<select name="activity">
<option value="low">Низкий</option>
<option value="medium">Средний</option>
<option value="high">Высокий</option>
</select>
</p>
<p>
Список продуктов:<br>
<textarea name="products" rows="4" cols="40"></textarea>
</p>
<p>
Дата рождения (дд.мм.гггг):<br>
<input type="text" name="birth" placeholder="01.12.1990" required>
</p>
<input type="submit" value="Рассчитать">
</form>
<hr>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$name = trim($_POST["name"]);
$age = (int)$_POST["age"];
$weight = (float)$_POST["weight"];
$height = (float)$_POST["height"];
$gender = $_POST["gender"];
$activity = $_POST["activity"];
$products = trim($_POST["products"]);
$birth = $_POST["birth"];
$errors = [];
if ($age < 1 || $age > 120)
$errors[] = "Возраст должен быть от 1 до 120.";
if ($weight < 30 || $weight > 300)
$errors[] = "Вес должен быть от 30 до 300 кг.";
if ($height < 100 || $height > 250)
$errors[] = "Рост должен быть от 100 до 250 см.";
if (!preg_match("/^\d{2}\.\d{2}\.\d{4}$/", $birth))
$errors[] = "Дата рождения введена неверно.";
if (!empty($errors))
{
foreach ($errors as $error)
{
echo "<p style='color:red'>$error</p>";
}
}
else
{
$bmi = $weight / pow($height / 100, 2);
if ($bmi < 18.5)
$bmiCategory = "Недостаточная масса";
elseif ($bmi < 25)
$bmiCategory = "Норма";
elseif ($bmi < 30)
$bmiCategory = "Избыточная масса";
else
$bmiCategory = "Ожирение";
if ($gender == "male")
{
$calories = 10 * $weight + 6.25 * $height - 5 * $age + 5;
}
else
{
$calories = 10 * $weight + 6.25 * $height - 5 * $age - 161;
}
if ($activity == "low")
$calories *= 1.2;
elseif ($activity == "medium")
$calories *= 1.55;
else
$calories *= 1.9;
list($day, $month, $year) = explode(".", $birth);
$zodiac = getZodiac($day, $month);
$productArray = array_filter(array_map("trim", explode(",", $products)));
$productCount = count($productArray);
$symbolCount = mb_strlen($products);
echo "<h2>Результаты</h2>";
echo "<h3>Личные данные</h3>";
echo "Имя: $name <br>";
echo "Возраст: $age <br>";
echo "Вес: $weight кг <br>";
echo "Рост: $height см <br>";
echo "Пол: " . ($gender == "male" ? "Мужской" : "Женский") . "<br>";
echo "<h3>ИМТ</h3>";
echo "ИМТ: " . round($bmi, 2) . "<br>";
echo "Категория: $bmiCategory <br>";
echo "<h3>Калории</h3>";
echo "Суточная норма: " . round($calories) . " ккал<br>";
echo "<h3>Знак зодиака</h3>";
echo "Знак: $zodiac <br>";
echo "Предсказание: " . $horoscopes[$zodiac] . "<br>";
echo "<h3>Статистика продуктов</h3>";
echo "Количество продуктов: $productCount <br>";
echo "Количество символов: $symbolCount <br>";
foreach ($productArray as $product)
{
echo "<hr>";
echo "<h3>Продукт: $product</h3>";
$len = mb_strlen($product);
$letters = [];
for ($i = 0; $i < $len; $i++)
{
$char = mb_substr($product, $i, 1);
if ($char != " ")
{
if (!isset($letters[$char]))
$letters[$char] = 0;
$letters[$char]++;
}
}
echo "<table>";
echo "<tr><th>Буква</th><th>Процент</th></tr>";
foreach ($letters as $letter => $count)
{
$percent = round(($count / $len) * 100, 2);
echo "<tr>";
echo "<td>$letter</td>";
echo "<td>$percent %</td>";
echo "</tr>";
}
echo "</table>";
echo "<br><b>Делители количества букв ($len): </b>";
for ($i = 1; $i <= $len; $i++)
{
if ($len % $i == 0)
{
echo $i . " ";
}
}
echo "<br>";
}
}
}
?>
</body>
</html>