Проверить на конкретное состояние

Это моя функция ниже:

function Active()
{
............

$num_rows = $db->doQuery('SELECT PremiumDays, PremiumStartTime FROM Premium WHERE AccountID = ?', $_SESSION['AccountID']);
if ($num_rows == -1)
{
$this->Error('ERROR');
$db->getError();
return;
}

$data = $db->doRead();
$data['Status'] = $num_rows == 0 ? '<:SHOW_NO_PREMIUM_STATUS:>' : '<b><font size="2" color="red">Premium is active - <%Days_Remaining%> days remaining.</font></b>';

$replace = array
(
'account_status'        => $data['Status'],
'days_remaining'        => $data['PremiumDays'] - date_create($data['PremiumStartTime'])->diff(date_create())->days
);

$this->content = Template::Load('account-template', $replace);
}

PremiumDays столбец содержит такие числа, как 10,15,30 и т.п.

PremiumStartTime содержит дату в этом формате 2018-12-17 21:13:00

Если строка не найдена, будет отображаться <:SHOW_NO_PREMIUM_STATUS:>Тем не менее, я изо всех сил, чтобы сделать это, когда есть ряд, но days_remaining является 0 или как отрицательный -3 затем снова отобразить <:SHOW_NO_PREMIUM_STATUS:>

Вся помощь приветствуется. Заранее спасибо!

0

Решение

Вы можете переместить вычисление days_remaining прежде чем установить $data['Status'] (но после того, как вы определили, есть действительные данные, т.е. $num_rows != 0) и использовать его в вычислении $data['Status'] например

if ($num_rows == 0) {
$data['Status'] = '<:SHOW_NO_PREMIUM_STATUS:>';
$days_remaining = 0;
}
else {
$days_remaining = $data['PremiumDays'] - date_create($data['PremiumStartTime'])->diff(date_create())->days;
if ($days_remaining <= 0) {
$data['Status'] = '<:SHOW_NO_PREMIUM_STATUS:>';
}
else {
$data['Status'] = '<b><font size="2" color="red">Premium is active - <%Days_Remaining%> days remaining.</font></b>';
}
}
$replace = array(
'account_status' => $data['Status'],
'days_remaining' => $days_remaining
);
0

Другие решения

Я изменил ваш запрос и ваш код, надеюсь, это поможет вам

function Active() {

$num_rows = $db->doQuery('SELECT PremiumDays, PremiumStartTime, (PremiumDays - DATEDIFF(day, SYSDATETIME(), PremiumStartTime)) AS days_remaining FROM Premium WHERE AccountID = ?', $_SESSION['AccountID']);
if ($num_rows == -1) {
$this->Error('ERROR');
$db->getError();
return;
}
$data = $db->doRead();

if (empty($data) || $data['days_remaining'] < 0) {
$account_status = '<:SHOW_NO_PREMIUM_STATUS:>';
$days_remaining = 0;
}
else {
$account_status = '<b><font size="2" color="red">Premium is active - <%Days_Remaining%> days remaining.</font></b>';
$days_remaining = $data['days_remaining'];
}

$replace = array(
'account_status' => $account_status,
'days_remaining' => $days_remaining
);

$this->content = Template::Load('account-template', $replace);
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector