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

PHP+MySQL+JSON登录验证查询功能异常求助

问题排查与修复方案

嘿,作为PHP新手遇到这个问题很正常,我帮你拆解下代码里的关键问题,一步步帮你修复:

1. PHP代码中的核心错误

你的connection-login.php里有两个致命逻辑问题,还有严重的安全隐患:

  • 重复调用mysqli_fetch_assoc且参数错误:你先执行$result = mysqli_fetch_assoc($qry);把查询结果的第一行取成了数组,接着又用$row = mysqli_fetch_assoc($result);——这里参数应该是原始查询结果集$qry,而且第一次fetch后结果集已经被耗尽,第二次肯定拿不到数据。
  • 错误的结果判断逻辑:用$row != 0判断登录是否成功完全不对,应该检查查询是否返回了匹配的行。
  • SQL注入风险:直接把用户输入的账号密码拼进SQL语句,恶意用户能轻松篡改你的数据库,必须用预处理语句解决。

修复后的connection-login.php

<?php
// 初始化响应数组
$response = [];

$con = new mysqli("localhost", "root", "root", "solucionar_manutencoes_db");

// 检查数据库连接错误
if (mysqli_connect_errno()) {
    $response["error"] = "数据库连接失败: " . mysqli_connect_error();
    echo json_encode($response);
    exit;
}

// 使用预处理语句彻底避免SQL注入
$lg_user = $_GET['user'];
$lg_password = $_GET['pass'];

// 准备带占位符的SQL语句
$stmt = $con->prepare("SELECT * FROM tb_login WHERE lg_user = ? AND lg_password = ?");
// 绑定参数(ss表示两个参数都是字符串类型)
$stmt->bind_param("ss", $lg_user, $lg_password);
// 执行查询
$stmt->execute();
// 获取结果集
$result = $stmt->get_result();

// 判断是否有匹配的用户
if ($result->num_rows > 0) {
    $response["success"] = 1;
    // 可选:返回用户信息,比如 $response["user"] = $result->fetch_assoc();
} else {
    $response["failed"] = 0;
    $response["message"] = "用户名或密码错误";
}

// 清理资源
$stmt->close();
$con->close();

// 返回JSON响应
echo json_encode($response);
?>

2. JavaScript代码中的问题

你的JS没有阻止表单的默认提交行为,点击登录按钮后浏览器会自动刷新页面,AJAX请求还没完成就被中断了,必须添加e.preventDefault();来阻止默认跳转。

修复后的login.js

$(document).ready(function(){ 
    $('#errorLogin').hide(); 
    $('#formLogin').submit(function(e){ 
        // 阻止表单默认提交,避免页面刷新
        e.preventDefault();
        
        var username=$('#inputUser').val(); 
        var password=$('#inputPassword').val(); 
        
        $.ajax({ 
            type:'get', 
            dataType: 'json', 
            url: 'dist/php/connection-login.php', 
            data: { user: username, pass: password }, 
            success: function(response){ 
                console.log(response);
                // 这里可以添加登录成功/失败的前端逻辑
                if (response.success === 1) {
                    // 比如跳转到主页:window.location.href = "home.php";
                } else {
                    $('#errorLogin').text(response.message).show();
                }
            },
            error: function(xhr, status, error) {
                // 处理请求失败的情况
                console.error("请求出错:", error);
                $('#errorLogin').text("登录请求失败,请稍后重试").show();
            }
        }); 
    }); 
});

额外的重要建议

  • 密码存储要加密:现在你是明文存密码,这极度不安全!注册用户时用password_hash($password, PASSWORD_DEFAULT)生成哈希值存储,登录时查询到用户后用password_verify($lg_password, $user['lg_password'])来验证密码。
  • 改用POST请求:登录请求建议用POST而不是GET,因为GET参数会暴露在URL里,密码会被记录在浏览器历史或服务器日志中——只需要把JS里的type:'get'改成type:'post',PHP里用$_POST['user']和$_POST['pass']获取参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:23:58