You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android登录PHP脚本始终返回‘用户未找到’问题求助

排查Android登录PHP脚本返回“用户未找到”的问题

先看你贴的脚本片段,能发现几个明显的问题,咱们一步步来排查和修复:

1. 变量作用域的坑

你把$username和$password定义在if(isset($_POST['btn_login']))的代码块里,如果客户端提交的POST参数里没有btn_login这个键(比如有些客户端只传了username和password,没带按钮的name参数),那这两个变量就根本没赋值,SQL语句里的$username和$password是空的,自然查不到任何用户。

建议改成直接检查必要的登录参数是否存在,而不是依赖按钮的参数:

// 替换原来的if判断
if(isset($_POST['username']) && isset($_POST['password'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
} else {
    echo "缺少登录参数";
    exit; // 参数缺失直接退出
}

2. SQL注入导致的语法错误

你直接把POST参数拼进SQL语句里,如果用户名或密码里包含单引号(比如user'123),会直接破坏SQL的语法结构,导致查询失败,返回“用户未找到”。而且这种写法极不安全,很容易被注入攻击。

必须用预处理语句来执行查询,以mysqli为例:

// 假设你的conn.php已经创建了mysqli连接$conn
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
// 绑定参数,"ss"表示两个字符串类型的参数
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();

3. 脚本不完整,缺少结果判断逻辑

你的脚本只写了SQL语句的开头,没有执行查询和判断结果的代码。完整的逻辑应该是执行查询后,检查结果集的行数:

if($result->num_rows > 0){
    // 找到匹配的用户,返回登录成功
    echo "登录成功";
    // 可以在这里获取用户信息,比如$user = $result->fetch_assoc();
} else {
    // 没有匹配的记录,返回用户未找到
    echo "用户未找到";
}

额外的排查建议

  • 检查客户端提交的参数:在脚本开头加一行var_dump($_POST);,看看实际接收到的参数是什么,是不是参数名和你脚本里的username/password不匹配?
  • 验证数据库连接:在conn.php里加连接错误检查,确保连接到了正确的数据库:
    if($conn->connect_error){
        die("数据库连接失败: " . $conn->connect_error);
    }
    
  • 检查数据库数据:确认users表存在,且里面有对应的用户名和密码记录。另外,绝对不要明文存储密码!建议用password_hash存储哈希值,登录时用password_verify比对:
    // 登录时的密码验证逻辑
    $stmt = $conn->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    if($result->num_rows > 0){
        $user = $result->fetch_assoc();
        if(password_verify($password, $user['password'])){
            echo "登录成功";
        } else {
            echo "密码错误";
        }
    } else {
        echo "用户未找到";
    }
    
  • 查看SQL错误信息:如果用mysqli,可以在执行查询后检查错误:
    if(!$stmt->execute()){
        echo "SQL执行错误: " . $stmt->error;
    }
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:34:13