You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法删除当前登录用户账户及数据库用户删除失败问题求助

问题排查与解决方案

嘿,我来帮你搞定这两个棘手的问题!你遇到的核心问题是无法删除当前登录用户账户,且数据库里的用户根本没被删掉,最后直接跳转到失败页面。咱们一步步拆解修复:

一、先揪出代码里的明显漏洞

从你给出的代码片段来看,几个关键问题直接导致了删除失败:

  • SQL语句不完整:你的$sql = "DELETE FROM user WHERE id = $...没写完,应该是要拼接$uid吧?但直接拼接变量不仅容易出语法错误,还会有SQL注入的风险。
  • 缺少SQL执行与结果判断:你只定义了SQL语句,但没调用mysqli_query()去执行它,也没检查执行是否成功——这就导致不管删没删成,程序都可能直接跳转到失败页面。
  • 数据库密码可能有误$password = " ";这里多了个空格,如果你的本地数据库密码是空的,应该写成$password = "",不然可能连不上数据库(不过你代码里有连接检查,能走到删除步骤的话这个可能不是当前问题,但还是得修正)。

二、分步修复方案

1. 用预处理语句替代直接拼接

直接拼接用户相关变量(哪怕是session里的uid)都不安全,改用mysqli的预处理语句,既能避免SQL注入,又能保证语法正确。

2. 增加执行结果判断,按需跳转

执行删除后,必须检查是否真的删除了用户,再决定跳转到成功还是失败页面。另外,删除当前用户后记得销毁session,避免后续操作出现异常。

3. 修正数据库密码(按需调整)

如果你的数据库密码是空的,把$password = " ";改成$password = "",匹配实际的数据库配置。

三、修复后的完整代码

<?php
session_start();

// 先检查用户是否登录,避免未登录状态下执行删除
if (!isset($_SESSION['u_uid'])) {
    header("Location: login.php");
    exit();
}

$servername = "localhost";
$username = "root";
$password = ""; // 根据你的实际数据库密码调整
$dbname = "tickmill_auctions";

// 创建数据库连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接是否成功
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$uid = $_SESSION['u_uid'];

// 使用预处理语句执行删除操作,安全又可靠
$sql = "DELETE FROM user WHERE id = ?";
$stmt = mysqli_prepare($conn, $sql);
// "i"表示参数是整数类型,如果你的id是字符串就改成"s"
mysqli_stmt_bind_param($stmt, "i", $uid);

// 执行语句并判断结果
if (mysqli_stmt_execute($stmt)) {
    // 检查是否有用户被实际删除(避免id不存在的情况)
    if (mysqli_stmt_affected_rows($stmt) > 0) {
        // 删除成功,销毁当前session
        session_destroy();
        header("Location: login.php?action=deleted"); // 跳转到删除成功页面,可自行调整
        exit();
    } else {
        // 找不到对应id的用户,跳转失败页面
        header("Location: Afterlogin.php?action=failed");
        exit();
    }
} else {
    // SQL执行失败,跳转失败页面
    header("Location: Afterlogin.php?action=failed");
    exit();
}

// 关闭语句和连接
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

四、额外提醒

  • 销毁session很重要:用户被删除后,session里的用户信息就失效了,销毁session能避免后续页面出现逻辑混乱。
  • 检查受影响行数:有时候SQL执行成功,但可能没有匹配到对应的用户(比如id不存在),用mysqli_stmt_affected_rows()能确认真的有用户被删除。
  • 参数类型要匹配:如果你的user表中id是字符串类型,记得把"i"改成"s",和字段类型保持一致。

内容的提问来源于stack exchange,提问作者Ethan Dennis

火山引擎 最新活动