Jump to content
Fórum Script Brasil
  • 0

Checkdate


Guest --felipe --
 Share

Question

Guest --felipe --

Pessoal, estou com dúvidas no uso da função checkdate.

Tenho um formulário onde existe um campo para que o usuário entre com uma data. Essa data é atribuida a uma variável($dt_criacao). Ao enviar o formulário o sistema verifica todos os campos (todos os valores contidos no formulário são atribuidos a uma variável) e faz a consistência. É aqui que entra a dúvida.

A função checkdate pede que seja digitado valores neste formato xx/xx/xxxx.

Mais o valor do meu campo é uma variável.

Como posso dar consistência utilizando checkdate/explode?

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Não, a função usa o formato mês, dia, ano.. veja só o que ela mesmo diz:

bool checkdate ( int $month, int $day, int $year );

Ou seja, você vai ter que dar o explode (se vir dia/mes/ano fo form, dá o explode na barra-> / )no valor vindo do FORM e utilizar na ordem que o checkdate precisa... note também o INT na frente das variáveis, isso vai transformar o número para inteiros fazendo com que a função tenha sucesso na análise.

Link to comment
Share on other sites

  • 0
Guest --felipe --
Não, a função usa o formato mês, dia, ano.. veja só o que ela mesmo diz:

bool checkdate ( int $month, int $day, int $year );

Ou seja, você vai ter que dar o explode (se vir dia/mes/ano fo form, dá o explode na barra-> / )no valor vindo do FORM e utilizar na ordem que o checkdate precisa... note também o INT na frente das variáveis, isso vai transformar o número para inteiros fazendo com que a função tenha sucesso na análise.

Obrigado pela explicação mais eu continuo não entendendo.

Será que você poderia dar um exemplo prático da aplicação desta função, mais utilizando uma variável(que recebe a data digitada pelo usuário) em vez de utilizar a data direto.

Valeu

Link to comment
Share on other sites

  • 0

<?php
$data = "27/02/1984";
list($dia,$mes,$ano) = explode ("/",$data);
$msg = (checkdate($mes, $dia, $ano)) ? "Data válida" : "Data inválida";
echo $msg;
?>

Note que se a data vem num formato diferente de dd/mm/aaaa do form você vai ter que ajustar ali no explode...

Link to comment
Share on other sites

  • 0
Guest --felipe --
<?php
$data = "27/02/1984";
list($dia,$mes,$ano) = explode ("/",$data);
$msg = (checkdate($mes, $dia, $ano)) ? "Data válida" : "Data inválida";
echo $msg;
?>
Note que se a data vem num formato diferente de dd/mm/aaaa do form você vai ter que ajustar ali no explode...
Minha data vem neste formato 1984/02/27. Neste caso eu teria que colocar opção 1:
<?php
$dt_criacao = "1984/02/27";
list($ano,$mes,$dia) = explode ("/",$dt_criacao);
$msg = (checkdate($mes, $dia, $ano)) ? "Data válida" : "Data inválida";
echo $msg;
?>
ou opção 2:
<?php
$dt_criacao = "1984/02/27";
list($ano,$mes,$dia) = explode ("/",$dt_criacao);
$msg = (checkdate($ano, $mes, $dia)) ? "Data válida" : "Data inválida";
echo $msg;
?>

Link to comment
Share on other sites

  • 0
Guest --felipe --
A ordem do checkdate é sempre mes, dia, ano... logo é a opção 1...

Ainda não foi desta vez.

Logo que a página carregou, apresentou esta msg.(antes de ter preechido qualquer campo do form)

Warning: checkdate() expects parameter 3 to be long, string given in /var/homologacao/www/html/desenvolvimento/gitcmd/csi/cadastra_geral.php on line 95

data inválida

$cri = 'dt_criacao';

list ($ano, $mes, $dia) = explode ('/', $cri);

$msg = (checkdate($mes, $dia, $ano)) ? 'data válida' : 'data inválida';

echo $msg;

Link to comment
Share on other sites

  • 0
Guest --felipe --
Pois é... mas no caso você está dizendo que $cri tem o valor dt_criacao e não o valor da variável $dt_criacao...

Vamos lá:

A variável $dt_criacao recebe o valor do campo 'dt_criacao'.

Para dar consistência ao campo(máximo de 10 caracteres), eu utilizei a função strlen.

$dt_criacao = $_GET['dt_criacao']; // a variável recebe o valor

$dt_criacao = strtoupper($dt_criacao); // por padrão, como todos os campos estão com esta função, eu deixei neste campo também

$cri = strlen($dt_criacao); //atribui à variável a quantidade de caracteres.

$cri = $dt_criacao; // ou dt_criacao

list($ano, $mes, $dia) = explode ('/', $cri);

$msg = (checkdate($mes, $dia, $ano)) ? 'data valida' : 'data invalida';

echo $msg;

Eu tentei dos doios jeitos mais o erro continuou o mesmo

$cri = $dt_criacao; // ou dt_criacao

Link to comment
Share on other sites

  • 0

E desde quando número tem maiúsculos ou minúsculos (ou você não sabe pra que serve a função strtoupper)...

Dá um echo no $cri para ver qual o valor que ele tem, provavelmente não está sendo passado como o esperado...

Mais um detalhe, você está realmente usando o método GET no formulário?

Link to comment
Share on other sites

  • 0
Guest --felipe --
E desde quando número tem maiúsculos ou minúsculos (ou você não sabe pra que serve a função strtoupper)...

Dá um echo no $cri para ver qual o valor que ele tem, provavelmente não está sendo passado como o esperado...

Mais um detalhe, você está realmente usando o método GET no formulário?

Sim, estou usando o metodo GET no formulário.

Então eu posso tirar o strtoupper deste campo né?

Link to comment
Share on other sites

  • 0
Guest --felipe --

Realmente o $ cri não esta recebendo a valor correto.

Se eu envio o form sem preencher o campo ele retorna '0' e se eu coloco alguma data ele retorna '10'.

Isso é por causa do strtoupper no $dt_criacao?????

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...