PHP每周登录奖励

时间:2019-09-19 16:57:51

标签: php if-statement mysqli calendar

我正在尝试找出如何编写每周登录奖励的代码,到目前为止,我仍然对当前的逻辑有些困惑。

假设我有2个sql表; 1)对于具有登录会话日期的会员,以及2)奖励。到目前为止,这是我设法设法编写的代码,如果有比这更好的东西,将受到高度赞赏。 ; __;

// DO CHECK LOGIN
$sql = mysqli_query($connect, "SELECT * FROM `members` WHERE email='$login'");
$row = mysqli_fetch_assoc($sql);

$sql2 = mysqli_query($connect, "SELECT * FROM `rewards` WHERE email='$login'");
$row2 = mysqli_fetch_assoc($sql2);

if ($row2['week'] == 0) {
    echo 'This is your first weekly login bonus! Get your rewards below:';
    // INSERT REWARD FIRST WEEK
    mysqli_query($connect, "UPDATE `rewards` SET `week`='1', `login`='".date('Y-m-d H:i:s')."' WHERE email='$login'");
} else if (($row2['week'] == 1) && (/* $row['session'] is 7 days ahead of $row2['login']*/)) {
    echo 'Get your weekly login bonus below.';
    // INSERT REWARD SECOND WEEK
    mysqli_query($connect, "UPDATE `rewards` SET `week`='2', `login`='".date('Y-m-d H:i:s')."' WHERE email='$login'");
} else if (($row2['week'] == 2) && (/* $row['session'] is 7 days ahead of $row2['login'] (14 days)*/)) {
    echo 'Get your weekly login bonus below.';
    // INSERT REWARD THIRD WEEK
    mysqli_query($connect, "UPDATE `rewards` SET `week`='3', `login`='".date('Y-m-d H:i:s')."' WHERE email='$login'");
} else if (($row2['week'] == 3) && (/* $row['session'] is 7 days ahead of $row2['login'] (21 days)*/)) {
    echo 'Get your weekly login bonus below.';
    // INSERT REWARD FOURTH WEEK
    mysqli_query($connect, "UPDATE `rewards` SET `week`='0', `login`='".date('Y-m-d H:i:s')."' WHERE email='$login'"); // WEEK RESETS FOR NEXT LOGIN
} else {
    if ($row2['login'] /* is X days less than $row['session'] */) {
        echo 'Your next weekly reward is on [insert date].';
    } else if ($row['session'] /* is 8 days more than $row2['login'] */) {
        echo 'It seems like you missed a week\'s login. Start over again?';
        mysqli_query($connect, "UPDATE `rewards` SET `week`='0', `login`='".date('Y-m-d H:i:s')."' WHERE email='$login'");
    }
}

所以我不确定我将如何执行每个if-else语句的注释部分(除了INSERT REWARD部分),因为我有点迷失了。在此先感谢那些能够提供帮助的人!

1 个答案:

答案 0 :(得分:0)

PHP有很多处理时间的方法,我首选的方法是先将其转换为Unix时间。这是自1970年1月1日以来经过的秒数。例如,现在是Unix时间的1568953527

以下是用于处理时间和日期的一种示例代码:

$now = time(); // = 1568953527
$one_day = 60 /* seconds */ * 60 /* minutes */ * 24 /* hours */; // = 86400
$tomorrow = $now + $one_day; // 1569039927
$next_week = $now + $one_day * 7; // 1569558327

要在不重复代码的情况下多次使用它,可以将其放在函数中:

function is_not_older_than_one_week($time)
{
  $now = time();
  $one_day = 60 * 60 * 24;
  $one_week_ago = $now - $one_day * 7;

  return $time >= $one_week_ago;
}

$not_older_than_a_week = is_not_older_than_one_week(1568953527); // at the time of writing this is true, in 8 days from now it will be false

这是您可以在人类可读的日期中使用它的方法:

$date = '2019-09-20';
$unixtime = strtotime($date);
$not_older_than_a_week = is_not_older_than_one_week($unixtime);

您应该阅读this,还有另一种方法描述如何计算时间偏移。

希望这会有所帮助!