rededesignbh Postado Março 1, 2011 Denunciar Share Postado Março 1, 2011 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> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ensjo (Emerson Costa) Postado Março 1, 2011 Denunciar Share Postado Março 1, 2011 Pra começar, aqueleif($calcular="S") lá no começo deveria ser if($calcular!="S")não é? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rededesignbh Postado Março 1, 2011 Autor Denunciar Share Postado Março 1, 2011 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 "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="<?echo $PHP_SELF; ?>"> <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> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vini_loock Postado Março 2, 2011 Denunciar Share Postado Março 2, 2011 retorna algum erro? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gabriel S Oliveira Postado Março 2, 2011 Denunciar Share Postado Março 2, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rededesignbh Postado Março 2, 2011 Autor Denunciar Share Postado Março 2, 2011 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=BOMPredomimante B=RuimPredomimante C=FracoGabriel, 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gabriel S Oliveira Postado Março 3, 2011 Denunciar Share Postado Março 3, 2011 Não entendi ao certo o script que você quer. É para elaborar questionários ou apenas para exibir algum resultado para um questionário pré-definido? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
rededesignbh
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.
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
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.