Ir ao conteúdo

Posts recomendados

Postado

Fala galera, eu criei um script de php para saber se a pessoa tem 18 anos só que como ainda não tenho um site e não sei como faço pra testar o arquvi php sem um site gostaria de saber se o método que eu fiz vai funcionar e se é o correto 

 

$dia_hoje = date("d");
$mes_hoje = date("m");
$ano_hoje = date("Y");


if(empty($_POST["dia"]))
  $derror = "Prencha o dia do seu nascimento!!";
}
elseif(empty($_POST["mes"])){
  $derror = "Prencha o mês do seu nascimento!!";
}
elseif(empty($_POST["ano"])){
  $derror = "Prencha o ano do seu nascimento!!";
}else{
  $idade = $_POST["ano"] + 18;

  if($idade >= $ano_hoje ){
    if($idade == $ano_hoje){
      if($_POST["mes"] >= $mes_hoje){
        if($_POST["dia"] >= $dia_hoje){
          $ndia = test_input($_POST["dia"]);
          $nmes = test_input($_POST["mes"]);
          $nano = test_input($_POST["ano"]);
        }
      }else{
		$ndia = test_input($_POST["dia"]);
        $nmes = test_input($_POST["mes"]);
        $nano = test_input($_POST["ano"]);
    }
  }else{
    $derror = "Você ainda não tem 18 anos!!"
  }
  
}

ele vai verificar primeiro se a parte da data de nascimento do usuário não esta vazia, depois se não estiver ele faz o calculo para achar o ano em que o usuario vai fazer 18 anos, e verifica se o ano em que el faz 18 é maior ou igual a o ano atual

if($idade == $ano_hoje){

muitos vão questionar o porque desse if é só para pular  a verificação de dia e mês se o cara tiver mais de 18 anos(mesmo não precisando)

 

esse é o código a variável $derror é a variável de erro que eu vou dar echo no site ao lado do input 

  • Moderador
Postado

@Matheus Evandro Rech

Sim, eu tive essa mesma dúvida que você informou: Porque fazer esse monte de teste de if com dias, meses... e ano?

Seria muito mais prático você fazer o cálculo baseado na idade que o usuário irá completar no ano atual.

Você pode reduzir tudo isso e ainda criar uma função.

 

Exemplo:

 

$data_nascimento = "1982-07-09";
$data_atual = date("Y-m-d");


function testaIdade($nascimento, $data_atual){
      $idade = $data_atual - $nascimento;
	
   $msg_menor = "Sua idade é: ". $idade.
                " Você ainda não tem 18 anos!!";

   $msg_maior = "Parabéns, você tem ". $idade.
                " anos. você pode avançar. É maior de idade";	  
	
      return ($idade < 18) ? $msg_menor : $msg_maior;
}
                          
echo testaIdade($data_nascimento, $data_atual);

Isso porque, para ter um teste mais preciso, você vai precisar até da hora que o usuário nasceu para ter o cálculo perfeito da idade.  Por isso que é muito mais fácil você apenas se basear no ano que ele vai completar a idade.

Repare que o teste do IF no return é para identificar se é maior de idade.; No caso como é a partir de 18 anos, então compare se o resultado da operação de subtração de datas for menor que 18.  se for menor é porque ele é menor de idade.

 

 

PS: só tive que quebrar a linha ali a frase de $msg_menor e $msg_maior por causa do espaço aqui no fórum, para não gerar uma barra horizontal... No seu caso, você pode deixar ambos em uma linha só, reduzindo o tamanho do código

 

 

  • Curtir 1
  • Moderador
Postado

@Matheus Evandro Rech A função  date, não é relacionado ao elemento date do html5.

ela é uma função nativa do php para montar uma data.

 

$data_atual = date("Y-m-d");

Isso no php, gera a data atual.  OU seja, se executar isso, vai gerar HJ: 2019-01-17

 

No seu caso, você só precisa ter apenas 1 input para data, não precisa quebrar em 3,  a não ser se for por mero capricho.

 

Vamos ao exemplo usando o que passei acima:

 

Temos o seguinte cenário no formulário:

 

<form action="testa.php" method="POST">
  <input type="text" name="dataNascimento" placeholder="ex: 09/07/1982"/>
  
  <input type="submit" value="enviar" />
  
</form>

NO arquivo testa.php:

 

//recebe do formulário neste formato: 17/01/2019
$data_nascimento = $_POST["dataNascimento"];

//tranforma do padrão nacional para internacional: 2019-01-17
$data_internacional = implode("-",array_reverse(explode("/",$data_nascimento)));

//gera a data atual
$data_atual = date("Y-m-d");

//esta função testa a idade da pessoa e diz se é maior ou menor
function testaIdade($nascimento, $data_atual){
      $idade = $data_atual - $nascimento;
	
   $msg_menor = "Sua idade é: ". $idade.
                " Você ainda não tem 18 anos!!";

   $msg_maior = "Parabéns, você tem ". $idade.
                " anos. você pode avançar. É maior de idade";	  
	
      return ($idade < 18) ? $msg_menor : $msg_maior;
}
                          
echo testaIdade($data_internacional, $data_atual);

Agora você pergunta, porque diabos, usar o padrão internacional?  Porque banco de dados só usam assim, então é interessante você permitir que o usuário digite  a data no formato brasileiro, mas no fim, vai ser usado a data internacional.

 

Note que no código, recebe o valor do formulário, é usada no parâmetro da função.

 

Se você for quebrar a data e fazer 3 inputs, teria que depois concatenar tudo para formar a data e fazer os cálculos. Mesmo, assim, se ainda quiser, cogite fazer os campos com select, pois o usuário pode sem querer colocar números não permitidos.

 

Um detalhe, eu coloquei a verificação dentro da função, porém é interessante pensar que é melhor deixar a função apenas determinar a idade do usuário e usar o IF para permitir ou não alguma ação.

 

Agora, se o seu intuito disso, é por exemplo liberar algum botão ou funcionalidade se for maior de idade, é imprescindível que você faça isso no cliente. Ou seja, por javascript.

 

  • Curtir 1
  • Moderador
Postado

@Matheus Evandro Rech Sim, "pode" funcionar do mesmo jeito, só que imagine da seguinte maneira:

Do jeito que você está fazendo, seria como dar o dobro de voltas para atingir um certo lugar. Do jeito que eu mostrei acima, seria um atalho.

Ambos levarão ao mesmo lugar, mas por caminhos diferentes.  A questão de eficiência, são a mesma, talvez o que pese ali é o fato de fazer 4 testes de IF, você precisa pensar no desempenho que sua aplicação vai ter.  Quanto mais testes, mais lento, pois há mais verificação antes do resultado.

 

Não que seja errado, e nem dá para dizer que o jeito que você fez está errado. Só não é recomendado fazer isso, quando há jeitos com menos linhas para fazer.

 

Só não entendi algumas coisas ali.. por exemplo:

$idade = $_POST["ano"] + 18;

Porque somar com 18?  o $_POST['ano'] vai trazer o ano de nascimento da pessoa. No caso se eu digitasse 1982, ficaria 2000, ou seja, eu não nasci no ano 2000.

Daí você compara:

if($idade >= $ano_hoje ){

Se a idade(2000) for maior ou igual ao ano hj(2019) , vai comparar o mês, com o mes hj  e por ai vai.. esta parte toda, eu meio que não entendi sua lógica.

 

Porque na minha, é muito mais fácil(fácil mesmo) fazer um cálculo de datas ao invés de ficar comparando.

  • Curtir 1
Postado

@DiF se você coloca que nasceu em 1982 + 18 [e o ano em que você completa 18 ou seja se o ano atual for maior ele pula toda a verificação de dia e mês se for igual ele verifica se o mês que você faz aniversario é o  mês atual ou superior se for superior quer dizer que já fez 18 anos e se for o mês atual ele verifica o dia pronto foi um jeito que eu achei de fazer como já felei é pra testar um conceito que eu aprendi não vou usar em nenhum site

  • Curtir 1
  • Moderador
Postado

@Matheus Evandro Rech Agora entendi,  é ... realmente, para estudos serve o jeito que você fez, mas na prática não fica legal por conta dessas verificações adicionais. 

Porque entra naquele lance que mencionei, para ter uma verificação exata de quando o usuário vai completar 18 anos, teria que ter a hora de nascimento também.   Porque  a hora em conjunto com a data é que determina se eu completei os 18 ou se eu vou fazer.

 

Um exemplo que eu posso dar é o Fórum. Aqui é indicado que eu tenho 36 anos. Porque o sistema calcula pela data do meu nascimento em relação a data atual.

 

Em que situações onde você vai usar isso? Penso que que na maioria(senão todos) usa isso para aceitação de algum aviso, algo como, cadastros baseado na data fornecida no momento do cadastro.. 

 

Enfim, esse é o espirito, por a mão na massa,  muito fiz isso quando estava na faculdade,  testava as coisas, criava classes e funções e fazia testes...   Algo como o personagem principal do mangá/anime Shokugeki no souma faz quando elabora pratos:  pensa no processo, testa, dá errado, tenta de novo,  vê os problemas, testa, tenta de novo.. e por aí vai. :thumbsup:

 

Aprender php é puramente prática!

 

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!