Ir ao conteúdo
  • Cadastre-se

Recebendo dados do formulario


Ir à solução Resolvido por DiF,

Posts recomendados

Galera sou novo em php e não estou conseguindo efetuar esse problema.

 

Fiz o formulário com os dados necessários, até aí beleza, mas não hora em que tendo efetuar o if, está tento algum erro.

 

Código abaixo:

<!DOCTYPE html><html lang="pt-br"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Calcular o IMC</title></head><body> <?php    $nome = isset($_POST["nome"]) ? $_POST["nome"] : '';    $dd = isset($_POST["dd"]) ? $_POST["dd"] : '';    $mm = isset($_POST["mm"]) ? $_POST["mm"] : '';    $aaaa = isset($_POST["aaaa"]) ? $_POST["aaaa"] : '';    $sexo = isset($_POST["sexo"]) ? $_POST["sexo"] : '';    $peso = isset($_POST["peso"]) ? $_POST["peso"] : '';    $altura = isset($_POST["altura"]) ? $_POST["altura"] : '';    if($altura>0) {    $imc = $peso / (($altura/100)*($altura/100));    } else $imc = 0;    ?><form method="post" name="IMC" action="imc.php" >    <fieldset>        <legend>Descubrindo seu IMC</legend>        <legend><h2><b>Informe seus dados</b></h2></legend>        <label>Nome:</label> <input name="nome" type="text" size="40" value="<?php echo $nome ?>"/><p>        <label>Data de nascimento: </label>            <input type="text" name="dia" size="2" maxlength="2" value="<?php echo $dd ?>">            <input type="text" name="mes" size="2" maxlength="2" value="<?php echo $mm ?>">            <input type="text" name="ano" size="4" maxlength="4" value="<?php echo $aaaa ?>"><p>        <label>Sexo: </label>            <select name="sexo">                <option name="sexo" type="string" value="Masculino" />Masculino</option><br />                <option name="sexo" type="string" value="Feminino" />Feminino</option><br />            </select><p>        <label>Peso (Kg): </label> <input name="peso" value="<?php echo $peso ?>"/><p>            <label>Altura (cm): </label> <input name="altura" value="<?php echo $altura ?>"/><p>        <input name="calcular" type="submit" value="Enviar"/>        <input name="limpar" type="reset" value="Limpar"/>    </fieldset></form>    <?php    if($sexo == "Masculino"){        if ($imc<20.7){        echo "Abaixo do peso";        } elseif ($imc>=20.7) && ($imc>26.4) {            echo "Peso normal";        }elseif ($imc>=26.4) && ($imc>27.8) {            echo "Marginalmente acima do peso";        }elseif ($imc>=27.8) && ($imc>31.1) {            echo "Acima do peso ideal";        }else{            echo "Obeso";        }    }else{        if ($imc<19.1) {        echo "Abaixo do peso";        }elseif ($imc>=19.1) && ($imc>25.8){            echo "Peso normal";        }elseif ($imc>=25.8) && ($imc>27.3){            echo "Marginalmente acima do peso";        }elseif ($imc>=27.3) && ($imc>32.3){            echo "Acima do peso ideal";        }else{            echo "Obesa";        }    }    echo "Sua situação é: $imc";?></body></html>
Link para o comentário
Compartilhar em outros sites

  • Moderador
  • Solução

@Davi Nascimento_770787   

 

Tente primeiro fazer separado. 

crie um formulario.html e o arquivo imc.php

 

Além disso, o formulário ali tem alguns erros.

 

formulario.html

<form method="post" action="imc.php" >    <fieldset>        <legend>Descubrindo seu IMC</legend>        <legend><h2><b>Informe seus dados</b></h2></legend>        <label>Nome:</label> <input name="nome" type="text" size="40"/><p>        <label>Data de nascimento: </label>            <input type="date" maxlength="10" name="data" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4}$" />                    <label>Sexo: </label>            <select name="sexo">                <option  value="Masculino" />Masculino</option><br />                <option  value="Feminino" />Feminino</option><br />            </select><p>        <label>Peso (Kg): </label> <input type="text" name="peso" /><p>            <label>Altura (cm): </label> <input type="text" name="altura" /><p>        <input type="submit" value="Enviar"/>        <input type="reset" value="Limpar"/>    </fieldset></form>

O que mudou? Bom, os campos não precisam receber valores em php pois você irá digita-los em cada campo... a não ser que esteja trazendo dados de um banco de dados.

O campo da data. Não precisa ser dividido em 3 campos aceitando numero limitado de caracteres... então foi criada um campo input do tipo date... é um tipo novo de entrada de dados introduzido no HTML 5.

o atributo pattern é uma expressão regular que filtra a entrada no formato de datas..

 

O elemento select já possui o atributo name. então o atributo name contido no elemento option era desnecessário. foi retirado.

No campo peso e altura,  eles tem que ser do tipo text também... onde você colocará os valores manualmente..

 

O elemento type submit, não precisa de name. nem o elemento type reset

 

No arquivo imc.php:

<?php    $nome   = $_POST["nome"];    $data   = $_POST["data"];    $sexo   = $_POST["sexo"];    $peso   = $_POST["peso"];    $altura = $_POST["altura"];    $imc = $peso / (pow($altura,2));   if($sexo == "Masculino"):    if($imc < 20.7): echo "Abaixo do peso";       elseif($imc >= 20.7 && $imc < 26.4): echo "Peso normal;       elseif($imc >= 26.4 && $imc < 27.8): echo "Marginalmente acima do peso";       elseif($imc> = 27.8 && $imc < 31.1): echo "Acima do peso ideal";       else: echo "Obeso";    endif;else:    if($imc < 19.1): echo "Abaixo do peso";       elseif ($imc >= 19.1 && $imc < 25.8): echo "Peso normal";       elseif ($imc >= 25.8 && $imc < 27.3): echo "Marginalmente acima do peso";       elseif ($imc >= 27.3 && $imc < 32.3): echo "Acima do peso ideal";       else: echo "Obesa";    endif;   endif;

Tinha vários erros na sua lógica de operadores lógicos.. como  se um é maior e igual a um valor e outro menor que a um valor.

exemplo do seu código errado:

 

elseif ($imc>=20.7) && ($imc>26.4)

 

O segundo não tem que ser testado como maior.. mas sim como menor. Então pense sempre nesta ordem:

todos os primeiros testes são "maiores ou iguais a"  e todos os segundos testes são "menores que"

 

PS: eu usei a sintaxe alternativa do IF. então permite que eu escreva sem os delimitadores de bloco { }   particularmente acho melhor... mais elegante e legível.

 

Se quiser testar isso online acesse esse site: http://phptester.net/

 

cole o código a baixo e clique no botão "click to test your php code"

    $sexo   = "Masculino";//altere para Feminino se quiser testar como feminino    $peso   = 60; //altere o valor do peso    $altura = 1.70;  //altere o valor da altura$imc = $peso / (pow($altura,2));   if($sexo == "Masculino"):	if($imc < 20.7): echo "Abaixo do peso";    	elseif($imc >= 20.7 && $imc < 26.4): echo "Peso normal";    	elseif($imc >= 26.4 && $imc < 27.8): echo "Marginalmente acima do peso";		elseif($imc >= 27.8 && $imc < 31.1): echo "Acima do peso ideal";    	else: echo "Obeso";    endif;else:    if ($imc < 19.1): echo "Abaixo do peso";    	elseif ($imc >= 19.1 && $imc < 25.8): echo "Peso normal";    	elseif ($imc >= 25.8 && $imc < 27.3): echo "Marginalmente acima do peso";    	elseif ($imc >= 27.3 && $imc < 32.3): echo "Acima do peso ideal";    	else: echo "Obesa";    endif;   endif;
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...