更新:我不知道为什么时间差小于180秒仍然在用户评级栏中增加10

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新:我不知道为什么时间差小于180秒仍然在用户评级栏中增加10相关的知识,希望对你有一定的参考价值。

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

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

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

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

<?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();

以上是关于更新:我不知道为什么时间差小于180秒仍然在用户评级栏中增加10的主要内容,如果未能解决你的问题,请参考以下文章

Android 文本视图计时器

地理位置自定义更新间隔(30 秒)

MySQL群集中的批量插入和更新

我有这些考试,我不知道我的答案有啥问题

***Error,我不知道为啥

等待 ExecuteNonQueryAsync() 仍然阻塞我的用户界面