PHP会员时间和到期时间

时间:2016-01-24 02:05:51

标签: php html mysql database mysqli

我一直在开发一个拥有会员系统的网站,用户可以购买计划,然后将其添加到他们的帐户中。一旦成员过期,我就会对成员的去激活产生问题。

$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更改为No Membership而不是,但是如果它是0,我希望它忽略更改数据库。

对不起,如果我笨拙地措辞,这有点难以解释。提前谢谢大家!

2 个答案:

答案 0 :(得分: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行。

答案 1 :(得分:1)

正如评论中所讨论的,您的问题的解决方案是您要分配而不是比较

该行

if ($time_exp = 0) {

指定一个值而不是比较它,因此它应该是

if ($time_exp == 0) {

比较(双重等号)。见Reference - What does this symbol mean in PHP?

此外,您可以简化查询,如Matt给出的其他答案所示。通常,如果您可以在SQL中执行某些操作,请在SQL中执行此操作。使代码更清晰。