Úloha 1: BMI (Body Mass Index)

Začátečník $_POST if / elseif / else number_format() MathML

Cíl úlohy

Vytvořte PHP skript, který z formuláře přijme výšku (v centimetrech) a tělesnou hmotnost (v kilogramech), spočítá hodnotu indexu tělesné hmotnosti (BMI) a podle zjištěné hodnoty zařadí uživatele do odpovídající kategorie.

Matematický vzorec (MathML)

Index tělesné hmotnosti se vypočítá jako podíl hmotnosti v kilogramech a druhé mocniny tělesné výšky v metrech:

BMI = m [hmotnost v kg] ( v[cm] 100 ) 2 = m h2
Rozsah hodnot BMI Kategorie Zdravotní riziko
< 18,5 Podváha Zvýšené riziko podvýživy
18,5 – 24,99 Normální (ideální) váha Minimální zdravotní riziko
25,0 – 29,99 Nadváha Mírně zvýšené riziko
30,0 – 34,99 Mírná obezita (I. stupně) Zvýšené riziko kardiovaskulárních chorob
35,0 – 39,99 Střední obezita (II. stupně) Vysoké zdravotní riziko
≥ 40,0 Morbidní obezita (III. stupně) Velmi vysoké, akutní riziko

Úvahy a doporučený postup řešení

  • Zpracování vstupu z formuláře: Data zadaná uživatelem dorazí v superglobálním poli $_POST["vyska"] a $_POST["vaha"].
  • Desetinná čárka vs. tečka: Čeští uživatelé často píší desetinná čísla s čárkou (např. 75,5). PHP však jako desetinný oddělovač vyžaduje tečku. Použijte funkci str_replace(",", ".", $vstup).
  • Převod jednotek: Uživatel zadává výšku v centimetrech, ale ve vzorci vystupuje výška v metrech. Nezapomeňte výšku vydělit stem ($h = $vyska / 100;).
  • Dělení nulou: Zkontrolujte, zda je výška kladné číslo, aby nedošlo k chybě dělení nulou.
  • Větvení programu: Pomocí konstrukce if (...) elseif (...) else zařaďte výsledek do správné slovní kategorie.
  • Formátování výstupu: Použijte funkci number_format($bmi, 2, ',', ' ') pro zaokrouhlení na 2 desetinná místa s českou desetinnou čárkou.

Doplňující otázky k zamyšlení a rozšíření úlohy

  • 1. Co se stane v PHP, pokud se pokusíte sečíst nebo vydělit textový řetězec "80 kg"? Jak probíhá přetypování (type casting)?
  • 2. Jaké atributy v HTML5 formuláři můžete použít k tomu, aby prohlížeč sám hlídal povolené hodnoty (např. min="50" max="250")?
  • 3. Zkuste skript rozšířit o přepínač pohlaví (muž / žena) a věk – liší se doporučené ideální BMI pro muže a ženy nebo pro seniory?
  • 4. Jak zajistit, aby ve formuláři po stisknutí tlačítka „Vypočítej“ zůstaly vepsané hodnoty, které uživatel odeslal?

Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu bmi.php