← Desenvolvimento

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

Lida 15412 vezes

Offline

cgoncalves 
Membro
Mensagens 789 Gostos 0
Feedback +12

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

É óbvio que nunca vai funcionar!

Experimenta por o login.php assim (se não surtir o efeito que querias experimenta com o update como te disseram, não li o tópico todo):

Código: (php) [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;
}

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

cleanMemberSession($row["password"]);

header("Location: index2.php");

} 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
}
?>
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

Pessoal, este tópico pode ser encerrado.

Para futuros casos com esta dúvida, eis o que fiz:

No ficheiro "functions.php" que era chamado no ficheiro "config.php" que contém os dados de acesso à BD, que por sua vez é chamado no "login.php" (que no meu caso é directamente o "index.php").

Bom, isto pode estar um pouco confuso, mas a resolução foi muito simples...

Existe um código no "functions.php" que valida a password. Ei-lo:

Código: [Seleccione]
function checkPass($password) {

global $link;

$query="SELECT password FROM users WHERE password='$password'";
$result=mysql_query($query, $link)
or die("checkPass fatal error: ".mysql_error());

if(mysql_num_rows($result)==1) {
$row=mysql_fetch_array($result);
return $row;
}
return false;
}

Ora, o que eu fiz foi básicamente adicionar esta linha:

Código: [Seleccione]
mysql_query("UPDATE users SET valido=valido+1 WHERE password='$password'");
Aqui:

Código: [Seleccione]
function checkPass($password) {

global $link;

$query="SELECT password FROM users WHERE password='$password'";
mysql_query("UPDATE users SET valido=valido+1 WHERE password='$password'");
$result=mysql_query($query, $link)
or die("checkPass fatal error: ".mysql_error());

if(mysql_num_rows($result)==1) {
$row=mysql_fetch_array($result);
return $row;
}
return false;
}

E pronto, está a incrementar um valor sempre que um utilizador entra! :D

Visto que o que eu pretendia era tão simplesmente como algo que me indicasse quando aquela password tinha entrado no site, eis a solução simples. :)

Muito obrigado a todos os que ajudaram, espectacular a rapidez de resposta.

Vou passar a utilizar mais vezes este forum. Hehe.

Gostei do espirito de entreajuda.

Grande abraço,
Pedro Lima
Offline

STronic 
Elite
Mensagens 546 Gostos 8
Feedback +5

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

E se 2 utilizadores tiverem uma password igual ?
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

E se 2 utilizadores tiverem uma password igual ?

Neste caso isso nunca acontecerá pois haverão códigos (passwords) exclusivos para cada um dos convidados para este evento.

Portanto isso não acontecerá neste caso. :)

Mas para quem quiser fazer isto permitindo o registo de utilizadores, é utilizar o nome de utilizador como campo de verificação ao invés do campo da password como eu utilizei. É simples.
Offline

cgoncalves 
Membro
Mensagens 789 Gostos 0
Feedback +12

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

O update não deveria ser feito caso a password fosse válida, ou seja, dentro do if?
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 update não deveria ser feito caso a password fosse válida, ou seja, dentro do if?

Neste caso em concreto é indiferente pois ele só actualiza a BD se o campo da password corresponder a algum campo da password na BD.

Contudo, se formos a pensar numa estrutura com utilizador e password, ai sim teria de ficar o código no IF onde é feita a confirmação de user+pass.
Offline

cgoncalves 
Membro
Mensagens 789 Gostos 0
Feedback +12

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

Neste caso em concreto é indiferente pois ele só actualiza a BD se o campo da password corresponder a algum campo da password na BD.

Contudo, se formos a pensar numa estrutura com utilizador e password, ai sim teria de ficar o código no IF onde é feita a confirmação de user+pass.

Pelo que percebi a função checkPassword vai verificar se a password introduzida existe na BD, certo?
E é por isso que tens o if(mysql_num_rows($result)==1) que vai verificar se ela existe na BD, caso contrário retorna false.
O update não deveria ser só executado caso a password introduzida fosse válida?
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

Sim, já referi que tem razão e que deveria ser dessa forma.

Mas neste caso em concreto, está a funcionar perfeitamente bem assim. Já fiz diversos testes com diferentes passwords e ele regista sempre onde e quando quero, portanto está perfeito para este caso em concreto!

Obrigado. :)
Offline

cgoncalves 
Membro
Mensagens 789 Gostos 0
Feedback +12

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

Sim, já referi que tem razão e que deveria ser dessa forma.

Mas neste caso em concreto, está a funcionar perfeitamente bem assim. Já fiz diversos testes com diferentes passwords e ele regista sempre onde e quando quero, portanto está perfeito para este caso em concreto!

Obrigado. :)

Sim, mas estás a fazer um pedido completamente desnecessário à BD, mas ok.
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

Sim, mas estás a fazer um pedido completamente desnecessário à BD, mas ok.

Sim, eu agora sei disso, mas na altura quando comecei a fazer isto eu nunca tinha visto MySQL à frente... portanto não percebia nada disto.

O facto de ter conseguido interpretar o código e ter conseguido inserir o que queria no local correcto já é bem bom! :)

Para além disso, isto é um micro-site temporário para ser utilizado uma única vez para um evento e como tal a alteração que foi efectuada serve perfeitamente!

Como não estou propriamente a programar um "mega site" que necessite do máximo de optimização, esse pormenor não vai ter influencia no desempenho.

Mas obrigado uma vez mais.