1 回答

TA贡献1827条经验 获得超8个赞
您的代码中有一个错误,即当用户使用他们的电子邮件地址登录时,该地址存储在$_SESSION['username']. 在您的注销脚本中,您假设这实际上是他们的用户名,而实际上可能不是。将您的更新查询更改为这样的内容,您的问题可能会得到解决:
UPDATE users
SET lastseen='$last_timestamp'
WHERE username = '$last_user'
OR email = '$last_user';
虽然这可能有效,但我建议使用您的宝贵用户id。不要比较容易出现各种错误(大小写错误的字母、前导/尾随空格、不同编码等)的字符串,而是比较您的 ID。这不仅使事情更不容易出错,而且还会减少您的计算时间,尤其是在数据库查找的上下文中。
$_SESSION['user_id'] = $user_id['id']; // or $gen_id['id'] in the signup code.
$last_user = $_SESSION['user_id'];
$lastseen_query = mysqli_query($conn, "UPDATE users SET lastseen='$last_timestamp' WHERE id = '$last_user'");
将来要自己调试此类问题,您可以使用一种流行的、快速而肮脏的方式来转储变量的内容:打印/回显创建用户时的值并回$username显在上面的脚本更新数据库中最后看到的值,如下所示:$email$username
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
var_dump($username);
var_dump($email);
$last_user = $_SESSION['username'];
var_dump($last_user);
$last_user如果匹配的转储$email您知道上述错误适用并且是您的脚本行为不端的原因。您可能还会发现字符串值存在一些问题(可能在某些时候出现意外突变),这会导致 SQL 查询中的比较失败。
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报