我一直在开发一个拥有会员系统的网站,用户可以购买计划,然后将其添加到他们的帐户中。一旦成员过期,我就会对成员的去激活产生问题。
$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,我希望它忽略更改数据库。
对不起,如果我笨拙地措辞,这有点难以解释。提前谢谢大家!
答案 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中执行此操作。使代码更清晰。