如何在 PHP / MySQL 中禁用用户帐户
How to disable a user's account in PHP / MySQL
我的网站需要能够 "disable" 或 "de-activate" 用户的帐户(当然是根据用户的要求)。实际上,我在我的网站中放置的link是完全删除该帐户。
但是,根据经验,我知道永远不要从数据库中完全删除用户帐户是一种很好的做法。最好以某种方式简单地禁用它,这样用户就不能再登录了。但是,出于各种显而易见的原因,帐户本身应该保留在数据库档案中。
而且,这就是我的困境。我知道如何使用我的 PHP 代码删除帐户(只需要一个简单的 MySQL DELETE
查询)。这很简单。
但是,我不知道如何在 MySQL 数据库中 disable/deactivate 一个帐户,这样用户就无法再登录到我的网站。广泛的在线搜索一无所获。
我唯一能找到的是:REVOKE PRIVILEGES for user "login"
等等
但是,当这不起作用时,我并不感到惊讶。它只是服务器端。无法撤销最初从未授予的特权。
知道 disable/de-activate PHP 中的用户帐户需要什么样的代码吗?
所以首先,在您的登录 table 中添加一行 "activated"(我现在称之为 "login")。
"Delete"一个账号(或者直接禁用)
是这样的吗?我不知道你是否使用 id。我会推荐它。
<?php
$userid = $_SESSION["userid"]; // SET USER ID for example by session
if($_POST["delete"])
{
mysqli_query($conn, mysqli_real_escape_string($conn, "UPDATE login SET activated = 'no' WHERE id = '$userid'"));
// Do other stuff
}
?>
检查账户是否激活
登录时,首先检查用户名和密码是否正确,然后然后检查帐户是否已激活。使用这样的东西:
$activated = mysqli_num_rows(mysqli_query($conn, mysqli_real_escape_string($conn, "SELECT * FROM login WHERE username = '$username' AND password = '$password' AND activated = 'yes'")));
如果用户已激活,$activated 将为 1。因此,在设置会话(或其他)之前
if($activated == 1)
{
// your stuff
}
代码未经测试,但应该可以工作。如果它不起作用,请在评论中寻求更多帮助。
编辑: 永远不要将密码作为纯文本来保护!使用 md5(仍然不安全)或使用散列。 Hashing on php.net 感谢 halfer
我通常会向可能已删除列的表添加一个 deleted_at
字段:这样,您仍然拥有数据,但它本身已停用。如果要删除字段,请将 deleted_at
设置为当前时间戳。然后,在提取数据时,检查 deleted_at
字段是否为 NOT NULL,您将知道它是否已停用。
我的网站需要能够 "disable" 或 "de-activate" 用户的帐户(当然是根据用户的要求)。实际上,我在我的网站中放置的link是完全删除该帐户。
但是,根据经验,我知道永远不要从数据库中完全删除用户帐户是一种很好的做法。最好以某种方式简单地禁用它,这样用户就不能再登录了。但是,出于各种显而易见的原因,帐户本身应该保留在数据库档案中。
而且,这就是我的困境。我知道如何使用我的 PHP 代码删除帐户(只需要一个简单的 MySQL DELETE
查询)。这很简单。
但是,我不知道如何在 MySQL 数据库中 disable/deactivate 一个帐户,这样用户就无法再登录到我的网站。广泛的在线搜索一无所获。
我唯一能找到的是:REVOKE PRIVILEGES for user "login"
等等
但是,当这不起作用时,我并不感到惊讶。它只是服务器端。无法撤销最初从未授予的特权。
知道 disable/de-activate PHP 中的用户帐户需要什么样的代码吗?
所以首先,在您的登录 table 中添加一行 "activated"(我现在称之为 "login")。
"Delete"一个账号(或者直接禁用)
是这样的吗?我不知道你是否使用 id。我会推荐它。
<?php
$userid = $_SESSION["userid"]; // SET USER ID for example by session
if($_POST["delete"])
{
mysqli_query($conn, mysqli_real_escape_string($conn, "UPDATE login SET activated = 'no' WHERE id = '$userid'"));
// Do other stuff
}
?>
检查账户是否激活
登录时,首先检查用户名和密码是否正确,然后然后检查帐户是否已激活。使用这样的东西:
$activated = mysqli_num_rows(mysqli_query($conn, mysqli_real_escape_string($conn, "SELECT * FROM login WHERE username = '$username' AND password = '$password' AND activated = 'yes'")));
如果用户已激活,$activated 将为 1。因此,在设置会话(或其他)之前
if($activated == 1)
{
// your stuff
}
代码未经测试,但应该可以工作。如果它不起作用,请在评论中寻求更多帮助。
编辑: 永远不要将密码作为纯文本来保护!使用 md5(仍然不安全)或使用散列。 Hashing on php.net 感谢 halfer
我通常会向可能已删除列的表添加一个 deleted_at
字段:这样,您仍然拥有数据,但它本身已停用。如果要删除字段,请将 deleted_at
设置为当前时间戳。然后,在提取数据时,检查 deleted_at
字段是否为 NOT NULL,您将知道它是否已停用。