Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CamilaDePaula

Como fazer um insert no campo date em pt_BR com PHP?

Recommended Posts

Olá!

Preciso de uma ajuda, por favor... tenho um campo do tipo Date no banco, mas preciso que no formulário o usuário digite no formato que usamos no Brasil.

Para converter, estou fazendo o insert, com o auxilio do seguinte código:

 

$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));

 

Só que ele está bagunçando um pouco a data na hora de inserir no banco.

Por exemplo:

1 - se digito  28/02/2017 (yyyy) ele grava no banco  0000-00-00

2-  se digito 28/02/17 (yy) ele grava no banco  2028-02-17 (fica meio assim yydd/mm/yy)

 

Como posso corrigir isso?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá um echo na variável $data_operacao2 antes de inserir no BD para ver o valor real da variável após a alteração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo esta configuração sem problema, seta o campo como date e defini 0000-00-00 , não bagunça e fica certinho.

Porém faça como nosso amigo falou, da um echo e verifique.

Compartilhar este post


Link para o post
Compartilhar em outros sites
$dataCrua           = "2017-02-21";
$dataFormatada = date('d/m/Y', strtotime($dataCrua));
echo $dataFormatada;

 

Ta ai um exemplo de como tratar data vinda em outros formatos.

Lembrando que no BD em campo DATE você precisa salvar no formato "universal" YYYY-MM-DD

Sempre salve em YYYY-MM-DD e na impressão você faz a tratativa como te mostrei acima

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 21/02/2017 at 12:47, Guilherme Luiz disse:

$dataCrua           = "2017-02-21";
$dataFormatada = date('d/m/Y', strtotime($dataCrua));
echo $dataFormatada;

 

Ta ai um exemplo de como tratar data vinda em outros formatos.

Lembrando que no BD em campo DATE você precisa salvar no formato "universal" YYYY-MM-DD

Sempre salve em YYYY-MM-DD e na impressão você faz a tratativa como te mostrei acima

 

 

Obrigada pela resposta, mas não entendi muito bem o que voce postou.

Eu sei que o formato do campo Date é  YYYY-MM-DD, e é exatamente este o problema. Preciso tratar o campos para o envio, antes de tratar para a impressão.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 21/02/2017 at 11:01, gersonab disse:

Eu utilizo esta configuração sem problema, seta o campo como date e defini 0000-00-00 , não bagunça e fica certinho.

Porém faça como nosso amigo falou, da um echo e verifique.

 

O campos já está setado como date, mas não entendi a parte que você disse "defini 0000-00-00". Onde eu defino assim?

Em 21/02/2017 at 10:30, ESerra disse:

Dá um echo na variável $data_operacao2 antes de inserir no BD para ver o valor real da variável após a alteração.

 

Dei um echo após a alteração, e apareceu errado como no exemplo que citei. O que devo fazer? 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, CamilaDePaula disse:

 

O campos já está setado como date, mas não entendi a parte que você disse "defini 0000-00-00". Onde eu defino assim?

 

Dei um echo após a alteração, e apareceu errado como no exemplo que citei. O que devo fazer? 

$data_operacao2 = '21/10/1984';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2; //Resultado 1984-10-21

Logo o problema está no formato da sua data e não na conversão.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, ESerra disse:

$data_operacao2 = '21/10/1984';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2; //Resultado 1984-10-21

Logo o problema está no formato da sua data e não na conversão.

 

Como posso arrumar?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agora, CamilaDePaula disse:

 

Como posso arrumar?

 

 

Informe a data no formato correto... a data de entrada deverá ser dd/mm/aaaa. Se for outro formato a conversão não vai funcionar como esperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agora, ESerra disse:

 

 

Informe a data no formato correto... a data de entrada deverá ser dd/mm/aaaa. Se for outro formato a conversão não vai funcionar como esperado.

 

Mas estou informando a data no formato correto. Como eu disse, acontece seguinte:

 

1 - se digito  28/02/2017 (yyyy) ele grava no banco  0000-00-00 (assim com zero mesmo, sem a data)

2-  se digito 28/02/17 (yy, no caso o ano só com duas casas) ele grava no banco  2028-02-17 (fica meio assim yydd/mm/yy)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos tenta um novo aproach, pensar:

 

Me responde, porque motivo o BD está gravando 0000-00-00?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, ESerra disse:

Vamos tenta um novo aproach, pensar:

 

Me responde, porque motivo o BD está gravando 0000-00-00?

 

Talvez porque esteja pegando um formato inválido, ou talvez seja algum erro no INSERT, mas não sei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é o primeiro problema "talvez"... talvez é a mãe de todos os erros, você tem que entender o que está fazendo para só assim corrigir o problema.

 

Está sendo inserido 0000-00-00 porque o formato da data está fora do padrão que o campo exige.

 

Então, ANTES do insert, dê um echo na variável e veja o que de fato está sendo passado para o insert, esse será o ponto de partida.

Compartilhar este post


Link para o post
Compartilhar em outros sites
26 minutos atrás, ESerra disse:

Esse é o primeiro problema "talvez"... talvez é a mãe de todos os erros, você tem que entender o que está fazendo para só assim corrigir o problema.

 

Está sendo inserido 0000-00-00 porque o formato da data está fora do padrão que o campo exige.

 

Então, ANTES do insert, dê um echo na variável e veja o que de fato está sendo passado para o insert, esse será o ponto de partida.

 

 

Fiz assim: 

 

$data_operacao2 = '02/03/2017';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2; 

 

 

E retornou assim:  2017-03-02 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, ESerra disse:

Posta o script inteiro.

 

Já achei o que era... era um erro BESTA no input, que estava como "text", mudei para "date" e funcionou. Obrigada à todos! =)

 

 

Mas tenho outra dúvida no mesmo assunto:

 

Tenho uma página de edição que retorna os dados gravados de acordo com o ID,  que agora está retornando a data no formato em que ela foi gravada " 2017-03-02 ".

Como faço para mostrar na tela no formato pt_br e fazer o update no formato do banco novamente? 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 minutos atrás, CamilaDePaula disse:

 

Já achei o que era... era um erro BESTA no input, que estava como "text", mudei para "date" e funcionou. Obrigada à todos! =)

Funcionou "na sorte", pois o simples fato de usar um input text não justifica o erro em si.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.