Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Onde está meu erro

Olá, eu escrevi meu código do IMC e após terminar de escrever, comparei com o de outros que postaram seus códigos aqui. A maior similaridade foi com a do usuário João, e por mais que nossos códigos estejam realmente parecidos, o meu se recusa a funcionar, e eu gostaria de entender o porque.

Este é o meu código:

<?php

$altura = 1.72;
$peso = 80 . "kg";
$imc = ($peso / $altura * $altura) ;

echo "Verificando seu IMC..." . PHP_EOL;

 if ($imc <= 18.5); {
    echo "Você está abaixo do peso.";
} elseif ($imc >= 18.5 && 24.9);{
    echo "Você está com o peso ideal";
} elseif ($imc >= 25 && 29.9);{
    echo "Você está com sobrepeso.";
} elseif ($imc >= 30 && 39.9);{
    echo "Você está com grau de Obesidade II.";
} elseif ($imc > 40);{
    echo "Você está com grau de Obesidade III, grave.";


}
  echo PHP_EOL;
  echo "Adeus.";

O CMD me diz a seguinte coisa: syntax error, unexpected 'elseif' (T_ELSEIF), expecting end of file.

O que eu fiz de errado?

4 respostas

Fala Gustavo.

Tente remover o ';' antes do abre chaves '{'

} elseif ($imc >= 18.5 && 24.9);{ //INCORRETO

Assim:

} elseif ($imc >= 18.5 && 24.9){ //CORRETO

Diga se funcionou.

Isso funcionou, porém meu código não está funcionando corretamente. Duas coisas estão acontecendo. A primeira é este aviso que aparece e eu não sei o porque:

PHP Notice: A non well formed numeric value encountered in imc.php on line 5 Notice: A non well formed numeric value encountered in imc.php on line 5

E a segunda é que o código não está executando o cálculo $imc = ($peso / $altura * $altura) ;

Verificando seu IMC... Você está com o peso ideal Adeus.

E caso eu adicione echo "Seu IMC é $imc" . PHP_EOL; aparece da seguinte forma:

Verificando seu IMC... Seu IMC é 80 Você está com o peso ideal Adeus.

O que está acontecendo é que o código não está executando o cálculo, e quando peço para mostrar o $imc ele apenas mostra o peso, já que no começo do cálculo eu especifiquei que:

$peso = 80 . "kg"; $imc = ($peso / $altura * $altura) ;

Por que esse cálculo não está funcionando?

Dei uma mexida no código e ele está quase funcional. Utilizei a forma que o Vinicius mostrou no vídeo para fazer o PHP calcular o $imc.

<?php

$altura = 1.72;
$peso = 100 . "kg";
$imc = ($peso/$altura ** 2);

echo "Seu IMC é de $imc. Você está";

if ($imc<18) {
    echo " abaixo do peso" . PHP_EOL;

} elseif ($imc >= 20 && 24.9) {
    echo " com o peso ideal." . PHP_EOL;

} elseif ($imc > 25) {
    echo " acima do peso.";

} elseif ($imc >= 30) {
    echo " com obesidade I.";

} elseif ($imc >= 40) {
    echo " com obesidade avançada.";
}

echo "Até mais.";

O problema são esses sinais. O código não está conseguindo identificar corretamente qual echo colocar. As vezes o IMC está acima do peso e ele diz que está ideal e vice-versa. Acredito que o problema esteja no fato de que o código está interpretando dois números como se fosse um ou outro, ao invés de ser entre eles. Por exemplo:

$imc >= 30 && 40

O código deveria ler ENTRE 30 e 40, mas isso não está acontecendo. O que eu utilizo para que ele possa identificar ENTRE esses números e não um ou outro?

E eu também continuo recebendo isso no CMD:

PHP Notice: A non well formed numeric value encountered in imc.php on line 5

solução!

Olá Gustavo,

O primeiro aviso (PHP Notice) acontece porque você está fazendo um cálculo com um texto, ao fazer $peso = 100 . "kg"; o valor de $peso é o texto "100kg" e você está utilizando esse texto em um cálculo. O php ainda identifica que o texto inicia com um valor numérico então ainda realiza o cálculo, mas deixa esse aviso para você.


Já sobre os ifs, eles estão funcionando estranhamente porque algumas das condições estão incorretas.

Para verificar se o valor está entre dois números o correto é fazer assim:

if ($imc >= 30 && $imc <= 40) {}
   |-Condição1-|E|-Condição2-|

Agora estamos testando duas condições:

(Se o $imc é maior ou igual a 30) E (Se o $imc é menor ou igual a 40)