Jump to content


Photo

Data Não Está Sendo Inserida


  • Faça o login para participar
3 replies to this topic

#1 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 07/01/2009, 12:54

Fiz uma busca no fórum, mas não achei um tópico com solução para isso.

Tenho um campo como date no mysql, e através de um form o usuário insere um data (dd/mm/aaaa).

Para converter no formato aaaa-mm-dd usado pelo mysql, tenho essa linha:

$data = implode("-",array_reverse(explode("/",$_POST['data']))); //Date

Já fiz um debug e o retornado por $data é algo como quero... porém, no DB, sempre cadastra 0000-00-00 :huh:

Alguma idéia?

Edit: O problema é com o dia 31 apenas. Sempre que eu tento inserir algo como 31/09/1958, ele não insere e deixa nulo...

Mas não tenho como evitar esse dia... Alguma sugestão?

Edit2: Descobri o problema eu acho... Ao que parece, o mysql ao se usar date em um campo do DB, checa se aquela data pode/poderá existir.

Por exemplo: Não existe dia 31 no mês de fevereiro de 2009... Sendo assim não insere nada, se eu colocar essa data. Porém se colocar dia 31/03/2009, insere sem problemas (y)

Era isso mesmo então eu acho.

Obrigado.

Edição feita por: Firehalk, 07/01/2009, 13:01.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 07/01/2009, 16:04

Que engraçado, agora pouco criei uma função que talvez será útil para você.

function ValidData($data) {
	$data = explode('-', $data);
	$dm = $data[2] .'-'. $data[1];
	if ($dm != '29-02' && $dm != '30-02' && $dm != '31-02' && $dm != '31-04' && $dm != '31-06' && $dm != '31-09' && $dm != '31-11' || $dm == '29-02' && is_int($data[0] / 4)) {
		return true;
	}
}

As datas que não existem (29-02 / 30-02 / 31-02 / 31-04 / 31-06 / 31-09 / 31-11), a função não vai retornar true.

Mas pera aí, e o ano bi-sexto? Não se preocupe, quando a data for 29-02, a funcão vai retornar true se o ANO dividido 4 for um número inteiro.

Mas pera aí², e se o usuário colocar uma data que tenha o dia maior que 31, o mês maior que 12 ou o ano maior que o ano atual. Bom, se vira! :P Brincadeira... É só modificar a função, está bem tranquilo, eu não fiz isso porque estou trabalhando com select.

Como usar?

/* Formato da data: aaaa-mm-dd */


if (!ValidData('2009-01-31')) {
	echo 'Data Inválida.';
} else {
	echo 'Data Válida.';
}


if (!ValidData('2009-02-29')) {
	echo 'Data Inválida.';
} else {
	echo 'Data Válida.';
}


if (!ValidData('2008-02-29')) {
	echo 'Data Inválida.';
} else {
	echo 'Data Válida.';
}


É interessante usar, pois assim aquele 0000-00-00 nunca vai entrar no banco de dados.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#3 lomaster

lomaster

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado

Posted 15/01/2009, 20:26

Olá , colega!

O problema foi resolvido com a última dica. Só pra não deixar de encher o saco, tenho 3 campos com datas. Teria que criar 3 funções com nomes diferentes ou posso apenas trocar as $variáveis?

Valeu por enquanto!

#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 15/01/2009, 22:31

Não precisa de 3 funções não. É só trocar a data na hora de chamar a função...

Exemplos:

!ValidData('2008-02-29')
!ValidData('2008-02-31')
!ValidData($data)
!ValidData($nascimento)
!ValidData($vencimento)
att,
Muller Dias
ex-administrador Fórum WMO




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq