Загрузка данных


<?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>