Ir para conteúdo
Fórum Script Brasil
  • 0

Código IMC preciso de ajuda


rededesignbh

Pergunta

Olá Galera do forum!

Estou precisando de uma ajuda rapida em um script de (IMC)

Não sou muito experiênte em PHP, mas sei bastante coisa...

Gostaria de saber aonde está o erro no meu código.

Obrigado!

OBS:Procurei no forum algum script pronto, mas não encontrei o que havia procurado.

]<HTML>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">


      <p align="center"><b><font face="Arial" color="#000080" size="4">Cálculo
      do índice de massa corpórea (IMC)</font></b></p>


<?php

if($calcular="S")
{
?>

      <p align="center"><font face="Arial" size="2">Preencha os dados abaixo e
      clique em "Calcular IMC", e logo<br>
      após verifique o resultado na tabela.</font></p>
      <div align="center">
        <center>
        <table border="0" cellpadding="2" cellspacing="1" width="33%" bgcolor="#FFF3E8" height="148">
          <tr>
            <td width="100%" bgcolor="#FF9900" height="18">
              <p align="center"><b><font face="Arial" color="#FFFFFF" size="2">Digite
              seu peso e altura</font></b></td>
          </tr>
          <tr>
            <td width="100%" height="118">
              <form method="POST" action="<imc.php; ?>">
                <p align="center">   <br><input type="hidden" name="calcular" value="S">
                <font face="Arial" size="2">Peso:</font> <input type="text" name="peso" size="6" maxlength="10">
                <font face="Arial" size="2">kg</font></p>
                <p align="center"><font size="2" face="Arial">Altura:</font> <input type="text" name="altura" size="6" maxlength="10">
                <font face="Arial" size="2">m</font><br><br><font face="Arial" size="1">Obs: use o ponto para separar<br> as casas decimais</font></p>
                <p align="center"><input type="submit" value="Calcular IMC" name="calcula"></p>
              </form>
            </td>
          </tr>
        </table>
        </center>
      </div>
      <p align="center"> </p>

<?php
}
else
{

 if(strlen($peso)==0 || strlen($altura)==0 || $peso<1 || $peso>500 || $altura<=0 || $altura>3)
 {
   echo "<p align=\"center\"><font face=\"Arial\" size=\"2\" color=\"#000080\"><b>Valores inválidos!</b></font></p>";
 }

 else
 {
   $peso = str_replace (" ", "", $peso);
   $peso = str_replace ("kg", "", $peso);
   $peso = str_replace ("Kg", "", $peso);
   $peso = str_replace (",", ".", $peso);
   $altura = str_replace (" ", "", $altura);
   $altura = str_replace ("m", "", $altura);
   $altura = str_replace (",", ".", $altura);

   $imc = $peso / ($altura * $altura);
   $imc = substr ($imc,0,4);

   echo "<p align=\"center\"><font face=\"Arial\" size=\"2\" color=\"#000080\">Seu índice de massa corpórea (IMC) é <b>$imc</b></font></p>";
?>
      <p align="center"><font face="Arial" size="2">Verifique o seu índice na
      tabela</font></p>
      <div align="center">
        <center>
        <table border="0" cellpadding="2" width="85%" bgcolor="#F7F7F7">
          <tr>
            <td width="33%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>IMC</b></font></td>
            <td width="33%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>Classificação</b></font></td>
            <td width="34%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>Risco
              de doença</b></font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Menos de 18,5</font></td>
            <td width="33%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Magreza</font></td>
            <td width="34%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre
              18,5 e 24,9</font></td>
            <td width="33%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Normal</font></td>
            <td width="34%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">---------</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre 25 e 29,9</font></td>
            <td width="33%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Sobrepeso</font></td>
            <td width="34%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre 30 e 39,9</font></td>
            <td width="33%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Obesidade</font></td>
            <td width="34%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Muito elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Igual ou maior de 40</font></td>
            <td width="33%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Obesidade grave</font></td>
            <td width="34%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Muitíssimo elevado</font></td>
          </tr>
        </table>
        </center>
      </div>
      <p align="center"> </p>
      <p align="center"><a style="font-family: Arial; font-size: 12 pt; font-weight: bold" href="<?php echo $PHP_SELF; ?>">Calcular
      outro índice</a></p>

<?php
}}
?>


</BODY>
</HTML>

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Fiz as modificações, mas continua a mesma coisa.

Obrigado a juda...

Aguardo respostas...

<HTML>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">


      <p align="center"><b><font face="Arial" color="#000080" size="4">Cálculo
      do índice de massa corpórea (IMC)</font></b></p>


<?php



if($calcular!="S")
{
?>

      <p align="center"><font face="Arial" size="2">Preencha os dados abaixo e
      clique em &quot;Calcular IMC&quot;, e logo<br>
      após&nbsp;verifique o resultado na tabela.</font></p>
      <div align="center">
        <center>
        <table border="0" cellpadding="2" cellspacing="1" width="33%" bgcolor="#FFF3E8" height="148">
          <tr>
            <td width="100%" bgcolor="#FF9900" height="18">
              <p align="center"><b><font face="Arial" color="#FFFFFF" size="2">Digite
              seu peso e altura</font></b></td>
          </tr>
          <tr>
            <td width="100%" height="118">
              <form method="POST" action="<?echo $PHP_SELF; ?>">
                <p align="center">&nbsp;&nbsp;&nbsp;<br><input type="hidden" name="calcular" value="S">
                <font face="Arial" size="2">Peso:</font> <input type="text" name="peso" size="6" maxlength="10">
                <font face="Arial" size="2">kg</font></p>
                <p align="center"><font size="2" face="Arial">Altura:</font> <input type="text" name="altura" size="6" maxlength="10">
                <font face="Arial" size="2">m</font><br><br><font face="Arial" size="1">Obs: use o ponto para separar<br> as casas decimais</font></p>
                <p align="center"><input type="submit" value="Calcular IMC" name="calcula"></p>
              </form>
            </td>
          </tr>
        </table>
        </center>
      </div>
      <p align="center">&nbsp;</p>

<?php
}
else
{

 if(strlen($peso)==0 || strlen($altura)==0 || $peso<1 || $peso>500 || $altura<=0 || $altura>3)
 {
   echo "<p align=\"center\"><font face=\"Arial\" size=\"2\" color=\"#000080\"><b>Valores inválidos!</b></font></p>";
 }

 else
 {
   $peso = str_replace (" ", "", $peso);
   $peso = str_replace ("kg", "", $peso);
   $peso = str_replace ("Kg", "", $peso);
   $peso = str_replace (",", ".", $peso);
   $altura = str_replace (" ", "", $altura);
   $altura = str_replace ("m", "", $altura);
   $altura = str_replace (",", ".", $altura);

   $imc = $peso / ($altura * $altura);
   $imc = substr ($imc,0,4);

   echo "<p align=\"center\"><font face=\"Arial\" size=\"2\" color=\"#000080\">Seu índice de massa corpórea (IMC) é <b>$imc</b></font></p>";
?>
      <p align="center"><font face="Arial" size="2">Verifique o seu índice na
      tabela</font></p>
      <div align="center">
        <center>
        <table border="0" cellpadding="2" width="85%" bgcolor="#F7F7F7">
          <tr>
            <td width="33%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>IMC</b></font></td>
            <td width="33%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>Classificação</b></font></td>
            <td width="34%" bgcolor="#C0C0C0"><font face="Arial" size="2" color="#000080"><b>Risco
              de doença</b></font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Menos de 18,5</font></td>
            <td width="33%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Magreza</font></td>
            <td width="34%" <?php if ($imc<18.5) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre
              18,5 e 24,9</font></td>
            <td width="33%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Normal</font></td>
            <td width="34%" <?php if ($imc>=18.5 && $imc<25) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">---------</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre 25 e 29,9</font></td>
            <td width="33%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Sobrepeso</font></td>
            <td width="34%" <?php if ($imc>=25 && $imc<30) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Entre 30 e 39,9</font></td>
            <td width="33%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Obesidade</font></td>
            <td width="34%" <?php if ($imc>=30 && $imc<40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Muito elevado</font></td>
          </tr>
          <tr>
            <td width="33%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Igual ou maior de 40</font></td>
            <td width="33%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Obesidade grave</font></td>
            <td width="34%" <?php if ($imc>=40) {echo "bgcolor=\"#FFFF99\"";} ?>><font face="Arial" size="2">Muitíssimo elevado</font></td>
          </tr>
        </table>
        </center>
      </div>
      <p align="center">&nbsp;</p>
      <p align="center"><a style="font-family: Arial; font-size: 12 pt; font-weight: bold" href="<?php echo $PHP_SELF; ?>">Calcular
      outro índice</a></p>

<?php
}}
?>


</BODY>
</HTML>

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, com algumas modificações o seu código funcionou bem aqui.

Primeiramente, seria interessante saber a sua versão do PHP e algumas configurações. Por exemplo, no meu servidor, register_globals não está ativado, logo a parte de cálculo do seu código não funciona. register_globals é uma diretiva da configuração do PHP que registra todas as variáveis recebidas por POST e GET além das super globais do PHP.

O seu código assume que essa diretiva esteja ativada. Pois ao pegar os valores de altura e peso você não os recupera dessa maneira: $_POST['peso'], $_POST['altura'] ou ainda $_REQUEST['peso'], $_REQUEST['altura'] (a diferença entre $_POST e $_REQUEST é que, o primeiro apenas recupera dados recebidos via POST e o segundo o faz via POST ou GET, se não houver uma variável com esse nome recebido via POST ele tenta recuperar um valor via GET). Mas recupera simplesmente informando o nome da variável, que é o mesmo nome do campo do formulário: $peso, $altura.

Para corrigir, simplesmente atribua às variáveis $peso e $altura o valor recebido via formulário, dessa forma, antes da verificação de dados válidos:

$peso = $_POST['peso'];
$altura = $_POST['altura'];
Outro problema está na variável global $PHP_SELF, que possui o mesmo problema: assume que a diretiva register_globals esteja ativada. utilize $_SERVER['PHP_SELF'] ao invés de $PHP_SELF. Atenção! Mesmo que não esteja com problemas nessa parte de register_globals que eu falei, é interessante você atualizar o código e escrever de acordo com essas regras para maior compatibilidade. Agora a parte mais importante, que talvez seja o seu problema mesmo, já que é um problema de lógica: Ao clicar em calcular, você apenas envia os dados para a mesma página que está, e nessa página você verifica se os dados foram enviados da seguinte forma:
if ($calcular != 'S')
A pergunta que eu faço é: Onde eu defino que $calcular é igual a S para que eu possa realizar a operação? E a resposta: Em lugar nenhum. Fiz da seguinte forma para resolver o problema, eis o cabeçalho do formulário como ficou:
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>?calcular=S">
Repare no "?calcular=S" depois do PHP_SELF (que foi alterado de acordo com o que eu falei sobre register_globals), isso indica que quando clicar no botão submit os dados serão enviados via post, mas uma informação será enviada via GET, que é a variável calcular. Para recuperar o valor dessa variável, utilize ao invés de $calcular, $_GET['calcular'], ou seja, a condição para o início do cálculo ficará assim:
if ($_GET['calcular'] != 'S')
Ou uma forma mais elegante para fazer a comparação seria assim:
if (!$_POST)
E o cabeçalho do formulário continuaria da mesma forma (sem o calcular=S):
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">

Essa verificação funciona assim: Se há dados a serem recebidos via POST, a variável global do PHP $_POST conterá um array com pelo menos um elemento, e nesse caso, a comparação retorna verdadeiro. Se não houver dados recebidos via POST, $_POST é um array vazio, logo retorna falso. O !(ponto de exclamação) indica que se Não (!) houver dados no array POST ele faça o que está dentro dos limites da chave, caso contrário (else) faça o cálculo, já que ele tem os dados (do mesmo modo da lógica atual).

Qualquer dúvida, estou à disposição.

Link para o comentário
Compartilhar em outros sites

  • 0

Muito Obrigado ocorreu tudo certo agora!

Muito obrigado mesmo!

Agora preciso criar um novo script tipo de questionario com variavel de predomimante.

Ex:

Predominante A=BOM

Predomimante B=Ruim

Predomimante C=Fraco

Gabriel, você poderia me dizer se eu acho esse script em algum lugar?

meu conhecimento com php é só na base de tutorial, mas tenho facilidade para aprender...

algum script ou tutorial montando esse esquema, se for possivel!

Obrigado a todos!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...