Ir ao conteúdo
  • Cadastre-se

PHP Comando NOW() no php


Ir à solução Resolvido por ArThDsL,

Posts recomendados

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?

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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