← Desenvolvimento

Questão simples de MySQL: Guardar hora ou data do login

Lida 15068 vezes

Offline

djdrumn 
Membro
Mensagens 67 Gostos 1
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 50 Posts 10 Posts First Post

Boas pessoal,

Eu nunca trabalhei directamente com MySQL a programar "à unha" e agora por esse motivo estou aqui um bocado "às aranhas".

Segundo o que consegui apurar segundo algumas pesquisas, parece-me algo simples para quem já é entendido em MySQL. No entanto, para quem ainda não está muito dentro disto como eu, é complicado estar a basear-me entre tanta e tanta coisa que existe na net...

Eu estou a utilizar este script simples: http://simpleauth.munk.me.uk/

O link e o que pretendo é isto: www.konicaminolta-opscoach2012.com

A ideia será, assim que o utilizador insira a password, fica o registo na base de dados de quando o fez!

Nada mais que isso...

Já está tudo a funcionar, falta o pormenor de registar quando entrou.

Como não quero que introduzam o utilizador mas sim apenas uma senha, já alterei o código para não ser necessário o utilizador, mas não consigo fazer com que este registe.

Por favor, alguém me consegue ajudar? :)

Muito obrigado.

Cumprimentos,
Pedro Lima
Offline

Bernardo Cordeiro 
Membro
Mensagens 242 Gostos 0
Troféus totais: 17
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts First Post

Se colocares NOW() aquilo mete a hora do momento do tipo Y-m-d H:i:s

Sent using Tapatalk 2 for Android
Offline

djdrumn 
Membro
Mensagens 67 Gostos 1
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 50 Posts 10 Posts First Post

Se colocares NOW() aquilo mete a hora do momento do tipo Y-m-d H:i:s

Sent using Tapatalk 2 for Android

Olá Kopimi,

Eu agradeço imenso a ajuda, mas este é o tipo de ajuda e respostas que tenho visto e que não me ajudam muito pois eu não sei como interpretar isto em código.

Ou seja, onde e como é que insiro isto? :)

É essa a minha dúvida.

Abraço,
Pedro Lima
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Se mostrares o código é mais fácil.
Supondo que estás a fazer um INSERT na bd procuro algo com "INSERT" no código, dentro dessa query tens de indicar o nome do campo da tabela (ex. data_registo), e indicar que é igual à data no momento, se for em php será algo assim...
Código: [Seleccione]
date_default_timezone_set('Europe/London');
$hora_registo = $date->format('Y-m-d H:i:s');

Em que $hora_registo é o valor correspondente ao campo data_registo.
Offline

djdrumn 
Membro
Mensagens 67 Gostos 1
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 50 Posts 10 Posts First Post

Olá Francisco,

Muito obrigado pela ajuda.

Eu já inseri uma query para tentar inserir isto, mas não fez nada... :(

O campo na BD tem que ser como date?

Todo o código está aqui: http://simpleauth.munk.me.uk/source/1.3/

Eu peço desculpa ser tão chato mas é que nãp percebo mesmo nada disto e não sei onde tenho que inserir o código! :(

Muito obrigado.

Cumprimentos,
Pedro Lima
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Pedro qual é a página que é carregada para inserires o código?
Offline

Bernardo Cordeiro 
Membro
Mensagens 242 Gostos 0
Troféus totais: 17
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts First Post

NOW() não é nenhuma função do php, mas sim do mysql que regista o preciso momento em que o query é adicionado
Eu vou editar o post e já te mostro como fiz

Edit:
Melhor ainda, e sem precisares de te preocupares em adicionar a hora na função php, nada melhor que definir na estrutura da DB

Vi no w3schools

http://www.w3schools.com/sql/func_now.asp

Sent using Tapatalk 2 for Android
Offline

djdrumn 
Membro
Mensagens 67 Gostos 1
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 50 Posts 10 Posts First Post

Pedro qual é a página que é carregada para inserires o código?

Olá,

Alterei o ficheiro "login.php".

Este é o ficheiro que estou a utilizar:

Código: [Seleccione]
<?php

include_once("config.php");

checkLoggedIn("no");

$title="Konica Minolta - OPS COACH 2012";

if(isset(
$_POST["submit"])) {

field_validator("password"$_POST["password"], "string"415);

if($messages){
doIndex();

exit;
}

    if( !(
$row checkPass($_POST["password"])) ) {

        
$messages[]="Por favor, tente inserir novamente.";
    }

if($messages){
doIndex();
exit;
}

cleanMemberSession($row["password"]);

header("Location: index2.php");

$visita=date("Y-m-d H:i:s");
$query="INSERT INTO ops_users ($password->lastvisitDate) VALUES('$visita')";
} else {
doIndex();
}

function 
doIndex() {

global $messages;

global $title;

?>

<html>
<head>
<title><?php print $title?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">

input.redondo {
border: 2px solid #2a34d9;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
-moz-box-shadow: 2px 2px 3px #666;
-webkit-box-shadow: 2px 2px 3px #666;
box-shadow: 2px 2px 3px #666;
font-size: 15px;
padding: 4px 7px;
outline: 0;
-webkit-appearance: none;
background:#005497;
color:#FFF;
}
input.redondo:focus { border-color: #005497; }
input.redondo:hover { background:#005497; }
input.redondo:active { background:#005497; }

body {
/* IE10 Consumer Preview */
background-image: -ms-radial-gradient(center, circle closest-corner, #FFFFFF 0%, #E3E3E3 100%);
/* Mozilla Firefox */
background-image: -moz-radial-gradient(center, circle closest-corner, #FFFFFF 0%, #E3E3E3 100%);
/* Opera */
background-image: -o-radial-gradient(center, circle closest-corner, #FFFFFF 0%, #E3E3E3 100%);
/* Webkit (Safari/Chrome 10) */
background-image: -webkit-gradient(radial, center center, 0, center center, 506, color-stop(0, #FFFFFF), color-stop(1, #E3E3E3));
/* Webkit (Chrome 11+) */
background-image: -webkit-radial-gradient(center, circle closest-corner, #FFFFFF 0%, #E3E3E3 100%);
/* W3C Markup, IE10 Release Preview */
background-image: radial-gradient(circle closest-corner at center, #FFFFFF 0%, #E3E3E3 100%);
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}

.imgtopo {
margin-left:28.5%;
}

.imginput {
margin-left:28.5%;
}

</style>
</head>
<?php doCSS(); ?>
<body>

<div class="imgtopo">
<img src="logo_fundo_topo.png" />
</div>
<div class="imginput">
<img src="logo_fundo_baixo.png" align="left" />
<b>CÓDIGO:</b>
<form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="POST">
<input type="password" name="password" class="redondo" maxlength="10">
<input name="submit" type="submit" value=">">
</form>
</div>
<center><?php

if($messages) { displayErrors($messages); }

?>
</center>
</body>
</html>
<?php
}
?>

Isto foi o que eu adicionei:

Código: [Seleccione]
$visita=date("Y-m-d H:i:s");
$query="INSERT INTO ops_users ($password->lastvisitDate) VALUES('$visita')";

No entanto, ele não regista nada... :(

Muito obrigado uma vez mais.

Abraço,
Pedro Lima
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

O campo tem de ser do tipo timestamp penso que se mudares para current_timestamp ele regista directamente a data e hora de registo.

Código: [Seleccione]
$visita=$date->format('Y-m-d H:i:s');
$query= mysql_query("INSERT INTO ops_users (data_registo) VALUES('$visita')") or die (mysql_error());;

Assim já deves conseguir registar a data/hora, se não colocares mysql_query, a query não é executada.
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Não se ponha a registar datas no mysql, registem antes unix time stamps, que depois se quiseres mudar de server ou alterar o fuso horario ai das coisas so vais ter problemas.
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Não se ponha a registar datas no mysql, registem antes unix time stamps, que depois se quiseres mudar de server ou alterar o fuso horario ai das coisas so vais ter problemas.

Não percebi onde está o problema, podes explicar isso?
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Simples, o modo nativo datetime do mysql  representa uma data especifica (dependendo do locale da db), o timestamp representa um ponto exacto no tempo, independente do locale.

Para alem disso nos ultimos updates do mysql existe algum indefinição sobre o datetime, o que originou 2 updates quase seguidos da branche 5.5.X

Editado para deixar o link: http://dev.mysql.com/doc/refman/5.5/en/news-5-5-27.html
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Percebo o que dizes, no entanto no caso ele acaba por não usar a data e hora para nada mais que um mero registo.

Suponho que como dizes devia usar o strtotime()
Offline

djdrumn 
Membro
Mensagens 67 Gostos 1
Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 50 Posts 10 Posts First Post

O campo tem de ser do tipo timestamp penso que se mudares para current_timestamp ele regista directamente a data e hora de registo.

Código: [Seleccione]
$visita=$date->format('Y-m-d H:i:s');
$query= mysql_query("INSERT INTO ops_users (data_registo) VALUES('$visita')") or die (mysql_error());;

Assim já deves conseguir registar a data/hora, se não colocares mysql_query, a query não é executada.

Infelizmente continuo sem conseguir! :(

A linha de código está inserida no sítio certo onde eu a inseri?

É que ele não me dá erro nenhum, mas também não me regista nada na BD! :(

Estou tramado... lol
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Criaste o campo data_registo na BD?