Ir ao conteúdo

PHP Comando NOW() no php


Ir à solução Resolvido por ArThDsL,

Posts recomendados

Postado

Boa noite,

 

Estou com um pequeno erro e não conseguindo ver onde errei...

Estou tentando colocar um sistema para identificar quando o registro foi criado, e quando ocorreu o ultimo login.

 

Para isso no banco de dados eu criei 2 colunas (datalogin e dataregistro) respectivamente informa a data do ultimo login e data do registro do cliente.

 

Linha de registro:

$sql = "INSERT INTO registro (dataregistro, datalogin)
VALUES ('NOW()', 'NOW()')";

Linha de login:

$data = mysqli_query($con, "UPDATE registro SET datalogin='NOW()' WHERE id=$id ");

 

Na tabela ambos estão no formato datetime, e estão retornando valores 0000-00-00....

 

Now esta incorreto?

Postado

Boa noite amigo,

 

Tente utilizar o NOW() sem ' ' :

 

Linha de registro:

$sql = "INSERT INTO registro (dataregistro, datalogin) VALUES(NOW(), NOW())";

.

Linha de login:

$data = mysqli_query($con, "UPDATE registro SET datalogin = NOW() WHERE id = $id");

 

Grande Abraço.

  • Curtir 1
  • Solução
Postado

Boa tarde amigo,

 

Eu realizei alguns testes aqui, quebrei a cabeça na verdade kkkkk, e acabei indo dar uma pesquisada sobre, o que acontece é que o PHP identifica o NOW() como uma string, ou seja, você tem de gerar a data e a hora pelo php e fazer um insert a partir do mesmo, segue abaixo:

 

Linha de Registro:

$dataAtual = date('Y-m-d H:i:s');
$sql = "INSERT INTO registro (dataregistro, datalogin) VALUES ($dataAtual, $dataAtual)";

 

Linha de login:

$dataAtual = date('Y-m-d H:i:s');
$data = mysqli_query($con, "UPDATE registro SET datalogin = $dataAtual WHERE id = $id");

 

Segue o link da fonte: https://stackoverflow.com/questions/4174304/sql-now-gives-0000-00-00-000000

 

Grande abraço.

 

 

  • Obrigado 1
Postado

@ArThDsL Realmente cara, pesquisei em muitos lugares e encontrei esse mesmo conceito, mas foi difícil conseguir aplica-lo. Sua explicação ajudou bastante. Entretanto estou com 2 problemas:

 

1- Linha de registro funcionando perfeitamente, porém a linha de login não. Quando o comando de UPDATE é executado os dados do banco retornam para 0000-00-00... 

2- A hora registrada no banco não é a do meu computador em si, mas a hora do servidor. Sabe como posso proceder?

 

Agradeço imensamente pela resolução

Postado

Boa tarde amigo,

 

Vou enumerar as questões confirme você solicitou :): 

____

1°.

Verificar se:

• Campo da tabela está em DATETIME()

• A variável $dataAtual = date('Y-m-d H:i:s'); encontra-se setada.

 

Segue uma linha para teste abaixo caso os 2 itens acima estejam corretos:

$data = mysqli_query($con, "UPDATE registro SET datalogin = '".addslashes($dataAtual)."' WHERE id = '".addslashes($id)."' ");

____

2°.

Geralmente os servidores PHP vem com o horário americano, você pode alterar isso de 2 formas:

 

1ª - Você pode alterar no arquivo php.ini, basta abrir o arquivo (se você usa xampp ele deve estar na pasta C:\XAMPP\PHP\) de um CTRL+F e busque pela linha date.timezone, ja nessa linha você deve substituí-la pelo seguinte:

date.timezone = America/Sao_Paulo

Caso ela tenha um ; na frente, remova.

 

Após fazer isso salve o arquivo e reinicie o Apache.

 

2ª - Adicione a linha:

date_default_timezone_set('America/Sao_Paulo');

Em todas as páginas que precisar após declarar todas includes/requires necessárias. (Ou faça uma classe principal / autoload).

 

____

Caso você queira utilizar a data/hora do sistema do cliente (o que não é recomendado, pois vários PCs tem a data / hora incorreta) é necessário utilizar javascript, segue um link abaixo:

https://www.quackit.com/javascript/javascript_date_and_time_functions.cfm

____

 

Grande abraço!

  • Obrigado 1
Postado

@ArThDsL A questão do horário eu consegui arrumar. Mas o UPDATE continua com problema.

 

Tentei de tudo ja, mudar variaveis, mudar cada detalhe e não vai... No registro ele seta os dados, mas na hora de fazer o UPDATE ele zera todos os dados.

 

Ja pesquisei sobre, e não tem nenhum erro aparente. Estou usando servidor web para hospedagem.

Postado

Boa tarde amigo,

 

Tente usar CURDATE(), vamos ver se funciona!

$data = mysqli_query($con, "UPDATE registro SET datalogin = CURDATE() WHERE id = $id");

 

Grande abraço.

  • Amei 1
Postado

@ArThDsL Finalmente funcionou amigo! CURDATE estava retornando apenas a data, então usei CURTIME, ele retornou a data e hora.

 

Entretanto retornou pro problema anterior, agora ele esta pegando a hora errada novamente 🤨

Postado

Boa noite man,

 

Seu server MySQL também está com a hora diferente (provavelmente americana), para alterar basta entrar no phpMyAdmin (ou no software / painel que você usa para acessar o MySQL) e digitar a seguinte linha:

SET @@global.time_zone = '+3:00';
QUIT

Caso não tenha permissão, deve solicitar ao suporte da sua hospedagem que realize a alteração.

 

Grande Abraço!

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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