Ir ao conteúdo
  • Cadastre-se

HTML E PHP Inverter data antes de gravar no banco de dados


Ir à solução Resolvido por lgwebforum,

Posts recomendados

Olá colegas.

 

Espero que alguém aqui possa me ajudar pois já busquei no Google e em diversos fóruns e não encontrei uma solução para modificar a data para o formato americano antes de gravar.

 

Estou desenvolvendo um sistema em HTML5 PHP e MYSQL,

Existe uma tela do meus sistema que é responsável pela atualização dos dados, nesta tela, existe

um campo DATA DE NASCIMENTO. este campo  já exibe a data gravada atualmente no formato brasileiro graças a um código

php, vejam:

            	<input                     name="dpf_dt_nasc"                     type="text_c4"                     id="dpf_dt_nasc"                     value="<?php echo date('d/m/Y', strtotime($row_rs_dados_pf['dpf_dt_nasc'])); ?>" >

Porém, quando eu preencho a nova data no formato brasileiro "dia/mes/ano" ela é gravada errada no banco de dados que só aceita o formato "ano/mes/dia".

 

Como eu faço para corrigir a data antes de enviar ao banco de dados?

 

Vou postar abaixo a parte do código responsável por atualizar a data, não sei se ela é a parte que deve ser modificada, se for outra parte basta pedirem.

  $updateSQL = sprintf("UPDATE dados_pf SET dpf_nome=%s, dpf_est_civil=%s, dpf_rg=%s, dpf_cpf=%s, dpf_dt_nasc=%s WHERE dpf_anun_id=%s",                       GetSQLValueString($_POST['dpf_nome'], "text"),                       GetSQLValueString($_POST['dpf_est_civil'], "text"),                       GetSQLValueString($_POST['dpf_rg'], "text"),                       GetSQLValueString($_POST['dpf_cpf'], "int"),			                       GetSQLValueString($_POST['dpf_dt_nasc'], "date"),		                       GetSQLValueString($_POST['anun_id'], "int"));				     mysql_select_db($database_conSisDtv, $conSisDtv);   $Result1 = mysql_query($updateSQL, $conSisDtv) or die(mysql_error());

Desde já, muito obrigado a quem puder ajudar.

Segue em anexo tb a página completa.

 

 

 

 

 

 

anunciantes_dados_atualizar.php

Link para o comentário
Compartilhar em outros sites

  • Moderador

@lgdelai, é coisa mais simples do mundo manipular datas com php.

 

veja o exemplo utilizando a função explode()..  com isso você pode criar uma função que receba a data brasileira como parâmetro.. e inverta

function inverteData($data){    
   $parteData = explode("/", $data);    
   $dataInvertida = $parteData[2] . "-" . $parteData[1] . "-" . $parteData[0];
   return $dataInvertida;			
}

echo inverteData("25/09/2014");

Com isso é só atribuir a uma variável  a função .. e no parâmetro recebendo a variável da data brasileira..

 

acesse este site: http://writecodeonline.com/php/   teste a função como no print.

 

post-386885-0-74361100-1411689931_thumb.

Link para o comentário
Compartilhar em outros sites

Olá Dif, 

 

Obrigado pela ajuda.

 

Eu entendi a lógica da coisa, mas não consegui entender como implementar isto em meu código.

 

Sei que esta parte do código pega a data digitada no campo e atualiza o BD, 

GetSQLValueString($_POST['dpf_dt_nasc'], "date"),

Agora como faço para ele receber e enviar a data alterada?

 

 

Anexei o código da página completo para você analisar.

 

 

 

anunciantes_dados_atualizar.php

Link para o comentário
Compartilhar em outros sites

Já que está utilizando HTML 5, você pode adequar o campo da data, no formulário, pra receber o valor já no padrão americano.

 

Basta alterar a linha:

type="text_c4" 

 

Para:

type="date" 

 

Vai ficar até mais bonito, pois exibe o calendário pro usuário escolher a data.
A desvantagem é que não vai funcionar para browsers mais antigos.
Link para o comentário
Compartilhar em outros sites

 

Já que está utilizando HTML 5, você pode adequar o campo da data, no formulário, pra receber o valor já no padrão americano.

 

Basta alterar a linha:

type="text_c4" 

 

Para:

type="date" 

 

Vai ficar até mais bonito, pois exibe o calendário pro usuário escolher a data.
A desvantagem é que não vai funcionar para browsers mais antigos.

 

Entendi, mas eu quero que a data aparece no padrão brasileiro, pois serão brasileiros que vão usar o sistema.

Se eu mudar isso, já estou imaginando a confusão que será.

 

Tentei o código abaixo, mas apresenta erro.

  $updateSQL = sprintf("UPDATE dados_pf SET dpf_nome=%s, dpf_est_civil=%s, dpf_rg=%s, dpf_cpf=%s, dpf_dt_nasc=%s WHERE dpf_anun_id=%s",                       GetSQLValueString($_POST['dpf_nome'], "text"),                       GetSQLValueString($_POST['dpf_est_civil'], "text"),                       GetSQLValueString($_POST['dpf_rg'], "text"),                       GetSQLValueString($_POST['dpf_cpf'], "int"),		                       function inverteData($data){			$parteData = explode("/", $data);			$dataInvertida = $parteData[2] . "-" .			$parteData[1] . "-" .			$parteData[0];			return $dataInvertida;			}		       echo inverteData("dpf_dt_nasc"),                       GetSQLValueString($_POST[$date], "date"),                       GetSQLValueString($_POST['anun_id'], "int"));				     mysql_select_db($database_conSisDtv, $conSisDtv);   $Result1 = mysql_query($updateSQL, $conSisDtv) or die(mysql_error());

Mais alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@lgdelai,  você está cometendo o maior erro de todos.  "copiou e colou" .. dá para notar só por causa do "echo" na frente da função.

 

Obviamente você não entendeu, o espirito da coisa ainda.

 

Você DEVE utilizar a função na sua QUERY.

 

exemplo:

//recebe a data no formato DD/MM/AAAA$dataBrasileira = $_POST["data_brasileira"]; include 'conexao.php';include 'funcaoData.php'; //inclui o arquivo que contem a funçao de inverter a data$dataInvertida = inverteData($dataBrasileira);....

daí é só inserir no seu SQL a variável que recebe a função com a data brasileira como parametro.

 

Sugiro, você rever seus conhecimentos, sobre manipulação de datas com php e inserção no banco de dados.

Link para o comentário
Compartilhar em outros sites

  • Solução

@dif

 

Você tem razão, eu não entendi nada, e agora ficou mais complicado ainda :(

 

De qualquer forma, obrigado pelo tempo despendido, vou continuar tentando
até acertar.

Boa noite.

 

 

ATUALIZADO:

 

ENCONTREI A SOLUÇÃO: Neste blog:  http://www.l9web.com.br/blog/?p=68

 

Segue código com a solução:

 

CONVERTE A DATA DO FORMATO BR PARA EUA ANTES DE ENVIAR AO BD

A data no formato BR que está armazenada em " $_POST["dpf_dt_nasc"] "
é convertida para o formato dos EUA pelo código "implode/explode" e em seguida
armazenada na variável " $dpf_dt_nasc_eua "

 
  $dpf_dt_nasc_eua = implode("-",array_reverse(explode("/", $_POST["dpf_dt_nasc"])));   $updateSQL = sprintf("UPDATE dados_pf SET dpf_nome=%s, dpf_est_civil=%s, dpf_rg=%s, dpf_cpf=%s, dpf_dt_nasc=%s WHERE dpf_anun_id=%s",                       GetSQLValueString($_POST['dpf_nome'], "text"),                       GetSQLValueString($_POST['dpf_est_civil'], "text"),                       GetSQLValueString($_POST['dpf_rg'], "text"),                       GetSQLValueString($_POST['dpf_cpf'], "int"),                                              /*A data armazenada em "$dpf_dt_nasc_eua" será enviada ao BD */                       GetSQLValueString($dpf_dt_nasc_eua, "date"),                       GetSQLValueString($_POST['anun_id'], "int"));    mysql_select_db($database_conSisDtv, $conSisDtv);   $Result1 = mysql_query($updateSQL, $conSisDtv) or die(mysql_error());

Ficou bem mais simples e funcional. 

 

Obrigado a todos que contribuíram.  :D

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@lgdelai,

 

Fui ríspido na resposta para incentivar você a estudar mais.

Basicamente o que você precisa entender é que o script PHP recebe a data no formato brasileiro "26/09/2014"

 

A função passada no post #02 faz a inversão baseada na data que é recebida.

 

Quando você vai gravar uma data no banco de dados, em um campo do tipo DATE,  ele precisa ser no formato internacional "2014-09-26".

 

Para fazer isso, no script PHP, você precisa colocar a data no formato brasileiro na função que inverte a data.. e depois inseri-la na instrução SQL que fará a inserção.

 

Isso quer dizer, que não é no ato de "atualizar" mas sim no ato de "cadastrar".

 

Considere que a função esteja em um arquivo chamado data.php.

 

Formulário:

<form method="post" action="insere.php">  <input type="text" name="nome" />  <input type="text" name="dataNascimento" />  <input type="text" name="email" />   <input type="submit" value="Cadastrar" /></form>

insere.php

//Recebe os dados vindo do formulário$nome = $_POST["nome"];$dataNascimento = $_POST["dataNascimento"];$email = $_POST["email"]; //credenciais do banco de dadosinclude 'conexaoComBD.php';//carrega a função de inverter a datainclude 'data.php';//Atribui em uma variável a função para inverter a data recebendo como parâmetro a data Brasileira$dataInvertida = inverteData($dataNascimento);//Instrução SQL inserindo a data no formato correto$cadastra = mysql_query("INSERT INTO usuario(nome, dataNascimento, email) VALUES('$nome', '$dataInvertida', '$email')");

Veja que na última linha, a variável $dataInvertida é usada.. ou seja, ela contém o valor da data enviada pelo formulário no formato invertido.

 

O grande e principal problema que está infernizando sua vida.. é o jeito como você está fazendo seu script php, entendo que muita preocupação com SQL Injection...  mas seu código está extremamente sujo... por isso recomendo você fazer de forma mais simples. do jeito que eu mostrei neste último exemplo.

 

Seguindo esta maneira NUNCA vai dar erro... a menos que digite algo errado.

Posteriormente, depois se você quiser acrescentar proteção ao SQL Injection,  existe centenas de funções... como por exemplo o addslashes() que acrescenta contra-barra invertida como escape de caracteres.. ou a função htmlentities() que retira tags que possam ser maliciosas.

 

Vou usar as palavras do meu amigo @Mog.Lucas,   você está dando um passo maior que sua perna. 

 

ps: tente entender como a função apresentada funciona.  sobre a função explode() para separar as partes de uma data.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...