PHP еженедельные награды за вход - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь выяснить, как запрограммировать еженедельные вознаграждения за вход в систему, и до сих пор я немного застрял в текущей логике, которая у меня есть.

Предполагается, что у меня есть 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 голосов
/ 20 сентября 2019

У PHP есть много способов справиться со временем, мой предпочтительный подход - сначала преобразовать его во время Unix.Это количество секунд, прошедших с 1 января 1970 года. Теперь это 1568953527 во времени Unix, например.

Вот пример кода, который можно использовать для обработки времени и дат:

$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);

Вы должны прочитать это , есть еще один способ, описанный, как рассчитать смещения времени.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...