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
相关产品推荐
相关产品推荐

