2016-01-24 353 views
0

我一直在一個擁有會員系統的網站上工作,用戶可以購買計劃,然後將其添加到他們的帳戶。一旦成員失效,我在解除激活時遇到問題。PHP會員時間和到期日期

$time_current = time(); 
$db_mem_check = mysqli_query($con, "SELECT * FROM members"); 
while ($row = mysqli_fetch_array($db_mem_check, MYSQLI_ASSOC)) { 
    $id = $row['id']; 
    $time_exp = (int)$row['mem_expiration_time']; 
    if ($time_exp = 0) { 

    } else { 
     $db_update = mysqli_query($con, "UPDATE members SET title='No Membership',mem_rank='none',mem_expiration='unknown',mem_expiration_time='0' WHERE mem_expiration_time < '$time_current' and id = '$id'"); 
     if(!$db_update) { 
      $danger[] = "MySqli Error: ".mysqli_error($con); 
     } 
    } 

} 

所以問題是,每當用戶刷新頁面,它改變了每個人的標題和mem_rank爲否成員和沒有,但我希望它忽略更改數據庫,如果它是0

對不起如果我這樣笨拙地表述,這很難解釋。在此先感謝大家!

+1

'if($ time_exp = 0){'this *賦值*一個值,你可能需要'==',它比較?現在,該語句將總是**返回true,因爲它成功地將變量'$ time_exp'設置爲值0.因此'else'塊將永遠不會被執行。 – Qirel

+0

哦,上帝,我怎麼會這麼愚蠢。林相當肯定你是正確的讓我去檢查 – Fearless

+1

小錯誤往往是最容易使@Fearless ;-) – Qirel

回答

1

正如在評論中討論的,解決你的問題是,你正在分配的,而不是比較

if ($time_exp = 0) { 

分配一個值,而不是,比較它,因此它應該是

if ($time_exp == 0) { 

比較(雙等號)。請參閱Reference - What does this symbol mean in PHP?

此外,您可以簡化您的查詢,如Matt所給出的其他答案所示。通常,如果您可以在SQL中執行某些操作,請使用SQL執行操作。使代碼更簡潔。

1

對於此問題,您並不需要兩個查詢,而您使用的是=,該值指定一個值而不是==,該值檢查值。試試這個,而不是你當前的代碼:

mysqli_query($con, "UPDATE members SET title='No Membership',mem_rank='none',mem_expiration='unknown',mem_expiration_time='0' WHERE mem_expiration_time < UNIX_TIMESTAMP() AND mem_expiration_time != 0"); 

太少的資源使用了。一號線,而不是15

+0

ahh偉大的意見,謝謝,我會執行這個以及 – Fearless