因此,我正在建立一个管理用户的系统,在永久删除记录之前,我实施了“回收站”作为健全性检查。
为此,我在表中添加了名为deleted
的布尔值(tinyint)。
这是我用来获取记录的方法:
static public function select_all($deleted = null) {
$query = "SELECT * FROM ".static::$db_table;
if ($deleted) {
$query .= " WHERE deleted = ".$deleted;
}
return static::sql_query($query);
}
$db_table
是在类中定义的,而sql_query($query)
是实际执行查询的方法,因为在每个类和每个查询中都使用它们,所以没有什么错。
这就是我所说的方法:
未删除:
$users = User::select_all(false);
deleted
设置为0的记录已删除:
$users = User::select_all(true);
deleted
设置为1的记录deleted
设置为1的记录这是我显示结果的方式:
<?php foreach ($users as $user) { ?>
<?php if ($user->id != $_SESSION['user_id']) { ?>
<tr>
<td><?= h($user->name()); ?></td>
<td><?= h($user->email); ?></td>
<td><?= h($user->username); ?></td>
<td><?= h($user->status()); ?></td>
<td>
<a href="<?= url('users/details.php?id='.h(u($user->id))); ?>">Details</a>
</td>
</tr>
<?php } ?>
<?php } ?>
h()
是htmlspecialchars()
的快捷方式,而()
是urlencode()
的快捷方式。
因此,基本上,它能够找到所有已删除的用户,但不能找到所有未删除的用户。 有人可以帮我吗?我将提供任何必要的其他信息。
答案 0 :(得分:1)
您的if语句阻止您将条件添加到SQL。试试if / else代替:
static public function select_all($deleted = null) {
$query = "SELECT * FROM ".static::$db_table;
if (null !== $deleted) {
if ($deleted) {
$query .= " WHERE deleted = 1";
} else {
$query .= " WHERE deleted = 0";
}
}
return static::sql_query($query);
}
更新
如果希望它与不带删除标志的表一起使用,则可以添加对null
的检查。查看更新的代码...