Это моя функция ниже:
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:>
Вся помощь приветствуется. Заранее спасибо!
Вы можете переместить вычисление 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
);
Я изменил ваш запрос и ваш код, надеюсь, это поможет вам
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);
}