Ir ao conteúdo
  • Cadastre-se
Davi Nascimento_770787

RESOLVIDO Recebendo dados do formulario

Recommended Posts

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×