更新:我不知道为什么小于 180 秒时的时差仍然在用户评分列中加 10



我有一个用户注册和登录系统,最初设置第一个注册日期和时间。每次用户登录时,我都有一个查询来检查注册的日期时间和当前时间之间的时差。如果时间差大于或等于 180 秒,则向该用户的评级列添加 10,并将当前登录时间重置为新的日期时间/注册日期时间,然后将用户重定向到索引页面。

如果时差小于 180 秒,只需将用户重定向到索引页,而无需向评级表添加数字。

我已经尝试了许多代码,研究如何使其工作,我看到的只是cron工作。 我不想用 cron job 来做这件事。

一定有办法,请帮忙。 你们需要救我。 这就是我所做的

<?php
// This is part of the code
//$_SESSION['id'] = $id;
$_SESSION['email'] = $email;   
date_default_timezone_set("Africa/Lagos");
// getting the time query difference
$sql1 = "SELECT TIMESTAMPDIFF(SECOND, date, NOW()) AS tdif FROM 
users WHERE email='$email'";  
$result = $con->prepare($sql1);
$result->execute();
$result->bind_result($tdif);
$result->fetch();
//var_dump($tdif);
if ($tdif >= 180) {  
//following code suppose run once every 180seconds
//update user's page rank
$sql2 = "UPDATE users SET rating = rating + 10 WHERE email='$email'"; 
$result2 = $con->query($sql2) or die("Unable to select and run query");
//update last execution time
$sql3 = "UPDATE users SET date = NOW() WHERE email='$email'";
$result3 = $con->query($sql3) or die("Unable to select and run query");
}

//login me in   
redirectToIndexPage();
// This Outputs Unable to select and run query
?>

无论时差如何,此代码只是在评级上加 10。 换句话说,每次用户登录时,它都会不断添加 10,这应该仅在上次登录或注册日期时间后 3 分钟(180 秒)发生

请帮助我知道我弄错了什么。

如上面的注释中所述,您没有按预期从查询中返回单个值。下面修改后的代码将执行相同的查询,并将$tdif变量设置为将在if语句中起作用的单个值。

$sql1 = "SELECT TIMESTAMPDIFF(SECOND, date, NOW()) AS tdif FROM users WHERE email=?";
$result = $con->prepare($sql1);
$resylt->bind_param("s",$email);
$result->execute();
$result->bind_result($tdif);
$result->fetch();
if ($tdif >= 180) {
//update user's page rank
$sql2 = "UPDATE users SET rating = rating + 10 WHERE email='$email'";
$result2 = $con->query($sql2) or die("Unable to select and run query");
//update last execution time
$sql3 = "UPDATE users SET date = NOW() WHERE email='$email'";
$result3 = $con->query($sql3) or die("Unable to select and run query");
}
redirectToIndexPage();

最新更新