.FaBio 112 Posted April 3, 2017 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
OnlZ 121 Posted April 3, 2017 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
morfo2 4,680 Posted April 3, 2017 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
.FaBio 112 Posted April 3, 2017 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
Kajo ✌ 57 Posted April 3, 2017 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
.FaBio 112 Posted April 3, 2017 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
Kajo ✌ 57 Posted April 3, 2017 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
.FaBio 112 Posted April 3, 2017 (edited) 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 April 3, 2017 by เмpคcтz (see edit history) Share this post Link to post Share on other sites
Kajo ✌ 57 Posted April 3, 2017 Quando mete o type date, o input aparece um uma setinha para seleccionares a data. 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
.FaBio 112 Posted April 3, 2017 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
Kajo ✌ 57 Posted April 3, 2017 Única coisa que te posso dizer é para procurares fazer isso com javascript Share this post Link to post Share on other sites
.FaBio 112 Posted April 4, 2017 (edited) 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 Caso seja tudo introduzido corretamente todos os campos são limpos e aparece a mensagem de sucesso: Obrigado a todos os que me ajudaram. Podem fechar o tópico. Cumprimentos, ImpacTz Edited April 4, 2017 by เмpคcтz Acresentado form (hmtl) (see edit history) Share this post Link to post Share on other sites