antiblock
Elveron
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
.FaBio

Ajuda num Problema ("Year 2038 problem")

12 posts in this topic

Boa tarde, estou aqui com um problema e esperava que me conseguissem ajudar.

Estou a criar um formulário e deparei-me com este problema.

Isto é o input:

	<div class="form-group">
	  <label class="col-md-4 control-label"><font color="black">Data Nascimento: 
	  <a data-toggle="tooltip" title="Data de Nascimento do participante (Ex: DD-MM-AAAA)">?</a></font></label>  
	  <div class="col-md-4 inputGroupContainer">
	  <input required id="dt" style='text-align:center;' name="dt_nasc" class="form-control" type="text" maxlength="10" onblur="return checkdate(this)">
	  </div>
	  <div style="text-align:left;" class="control-label" id="msgdate"></div>
	</div>

Aqui está um debuger:

$dt_part=mysql_real_escape_string($_POST['dt_nasc']);

$date2 = date("d/m/Y");
$refDate2 = date("d/m/Y", strtotime($dt_part));
echo $date2," > ", $refDate2;

Até aqui está tudo bem:

http://prntscr.com/eryefz

Mas se inserir uma data superior ao ano 2037 acontece isto:

http://prntscr.com/erye6y

 

Alguém sabe como solucionar isto ou então limitar o input para quando se introduz algo não deixar introduzir um ano superior ao atual?

 

Cumprimentos, ImpacTz

 

 

Share this post


Link to post
Share on other sites
antiblock
diamwall

Converte os dois para strtotime faz a verificação e só depois é que imprime isso

 

algo do tipo 

$date2 = strtotime(date("d/m/Y"));
$refDate2 = strtotime($dt_part);

if(date2 > refdate2)
echo $date2," > ", $refDate2;

else

outra cena.

Share this post


Link to post
Share on other sites

Em HTML basta usares o atributo min e max.

Exemplo:

<input type="date" name="birthday" min="1917-12-31" max="2017-04-03">

 

Se quiseres especificar anos em PHP tens aqui: https://www.w3schools.com/jsref/prop_month_min.asp

Share this post


Link to post
Share on other sites

Desde já obrigado aos dois pelas respostas.

1 hora atrás, OnlZ disse:

Converte os dois para strtotime faz a verificação e só depois é que imprime isso

 

algo do tipo 


$date2 = strtotime(date("d/m/Y"));
$refDate2 = strtotime($dt_part);

if(date2 > refdate2)
echo $date2," > ", $refDate2;

else

outra cena.

Usei o strotime e quando insiro uma data com o ano superior a 2037 acontece o mesmo:

http://prntscr.com/erzlga

 

57 minutos atrás, morfo2 disse:

Em HTML basta usares o atributo min e max.

Exemplo:

<input type="date" name="birthday" min="1917-12-31" max="2017-04-03"><br>

 

Se quiseres especificar anos em PHP tens aqui: https://www.w3schools.com/jsref/prop_month_min.asp

O que eu queria fazer com o max era que com o passar do tempo, à medida que os dias iam avançando, o valor max alterava-se para o dia atual.

 

Cumprimentos, ImpacTz

Share this post


Link to post
Share on other sites

Pelo que entendi, tu queres que a data máxima seja igual ao dia atual.
O que tens de fazer é:

  • alterar o type de "text" para "date".
  • retirar o maxlength
  • acrescentar max="<?php echo date("Y-m-d"); ?>"

Fica da seguinte forma.

 

	<div class="form-group">
		<label class="col-md-4 control-label">
			<font color="black">Data Nascimento: 
				<a data-toggle="tooltip" title="Data de Nascimento do participante (Ex: DD-MM-AAAA)">?</a>
			</font>
		</label>  
		<div class="col-md-4 inputGroupContainer">
			<input required id="dt" style='text-align:center;' name="dt_nasc" class="form-control" type="date" max="<?php echo date("Y-m-d"); ?>" onblur="return checkdate(this)">
		</div>
		<div style="text-align:left;" class="control-label" id="msgdate"></div>
	</div>

 

Share this post


Link to post
Share on other sites

Vou reformular o queria dizer entao xD, eu queria que o utilizador quando fosse a introduzir nao conseguisse meter uma data superior à do dia atual, por exemplo - 08-08-1997 - nao quero meter a do dia atual,  xD.

Share this post


Link to post
Share on other sites
20 minutos atrás, เмpคcтz disse:

Vou reformular o queria dizer entao xD, eu queria que o utilizador quando fosse a introduzir nao conseguisse meter uma data superior à do dia atual, por exemplo - 08-08-1997 - nao quero meter a do dia atual,  xD.

Então é exactamente o que quis dizer em cima.
O utilizador não consegue seleccionar nenhuma data ACIMA do dia atual, para baixo pode se o browser o permitir xD

Share this post


Link to post
Share on other sites
21 minutos atrás, Kajo disse:

Então é exactamente o que quis dizer em cima.
O utilizador não consegue seleccionar nenhuma data ACIMA do dia atual, para baixo pode se o browser o permitir xD

http://prntscr.com/es0z58

Nao funcionou :/

 

Edit : Esquece, faltava umas (")

Edit 2 : Só limita o max se introduzir a data através da tabela date http://prntscr.com/es10ux

Se introduzir manualmente nao limita :/

Edited by เмpคcтz (see edit history)

Share this post


Link to post
Share on other sites

Quando mete o type date, o input aparece um uma setinha para seleccionares a data.

r0izrpJ.png

 

Mas não o impede de inserir à mão, mas, irá dar erro ao validar (não testei mas acho que sim :D)

Share this post


Link to post
Share on other sites

Sim, se inserir assim pelo calendario que aparece na "setinha" ele limita o max para o dia atual, mas se introduzir manualmente nao limita 

Share this post


Link to post
Share on other sites

Única coisa que te posso dizer é para procurares fazer isso com javascript

Share this post


Link to post
Share on other sites

Bem, arranjei outra forma de contornar o problema, o que faço é uma verificação se o data inserida pelo utilizador é superior ao dia atual, se for superior irá mostrar uma mensagem de erro no ecrã a dizer que a data não é valida e não deixa que o formulário seja submetido, caso contrario é submetido com sucesso.

Form.

<div class="form-group">
  <label class="col-md-4 control-label"><font color="black">Data Nascimento: 
    <a data-toggle="tooltip" title="Data de Nascimento do participante (Ex: DD-MM-AAAA)">?</a></font></label>  
  <div class="col-md-4 inputGroupContainer">
    <input required id="dt" style='text-align:center;' name="dt_nasc" class="form-control" type="date" max="<?php echo date("Y-m-d");?>" onblur="return checkdate(this)">
  </div>
  <div style="text-align:left;" class="control-label" id="msgdate"></div>
</div>

 

Função JS.

function checkdate(form)  
{
	if(document.getElementById("dt").validity.rangeOverflow) {  
		document.getElementById("msgdate").innerHTML = "<font color='red'>Por favor introduza a data corretamente!</font>";
	} 
	else document.getElementById("msgdate").innerHTML = "";
}

No ficheiro para inserir na BD.

$date2 = strtotime(date("Y/m/d"));
$refDate2 = strtotime($dt_part);
if($refDate2 > $date2)
	//Mensagem de Erro
else //Insere na BD

090be1683a7f4caaab6ae631aa9014be.png

 

Caso seja tudo introduzido corretamente todos os campos são limpos e aparece a mensagem de sucesso:

564950420b3543e7abd59995f65be03e.png

 

Obrigado a todos os que me ajudaram. Podem fechar o tópico.

 

Cumprimentos, ImpacTz

Edited by เмpคcтz
Acresentado form (hmtl) (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this