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

无法通过logincheck.php完成用户名密码数据库校验,求技术协助

解决用户身份认证功能的问题

我帮你一步步排查代码里的问题,搞定用户身份校验功能:

首先梳理现有代码的核心问题

  • 变量名不匹配:你通过$_POST获取的用户名和密码变量是$uname和$pword,但SQL查询语句里却用了未定义的$username和$password,这直接导致数据库查询不到任何匹配数据。
  • 存在SQL注入风险:直接将用户输入拼接进SQL语句是高危操作,恶意用户可以通过构造特殊输入篡改SQL逻辑,窃取或破坏数据。
  • 缺少查询执行与结果校验:代码只定义了查询语句,但没有执行查询,也没有判断查询结果是否存在匹配的用户记录。

修正后的完整logincheck.php代码

<?php
// 获取表单提交的用户名和密码
$uname = $_POST['username'];
$pword = $_POST['password'];

$serverName = "<ip address , portnumber>";
$connectionInfo = array( "Database"=>"testing", "UID"=>"sa", "PWD"=>"abc@123");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
    // 使用参数化查询避免SQL注入,同时修正变量名
    $sqlquery = "SELECT * FROM emp WHERE username = ? AND password = ?";
    $params = array($uname, $pword);
    $queryResult = sqlsrv_query($conn, $sqlquery, $params);

    if($queryResult === false) {
        // 输出查询错误信息(生产环境建议隐藏具体错误,返回通用提示)
        die( print_r( sqlsrv_errors(), true));
    }

    // 检查是否查询到匹配的用户
    if(sqlsrv_has_rows($queryResult)) {
        echo "身份认证成功!";
        // 这里可以添加会话创建、页面跳转等逻辑,比如:
        // session_start();
        // $_SESSION['username'] = $uname;
        // header("Location: dashboard.php");
        // exit;
    } else {
        echo "用户名或密码错误,请重试!";
        // 可以跳回登录页,比如:
        // header("Location: login.html?error=1");
        // exit;
    }

    // 释放查询资源
    sqlsrv_free_stmt($queryResult);
    // 关闭数据库连接
    sqlsrv_close($conn);
} else {
    echo "数据库连接失败!";
    die( print_r( sqlsrv_errors(), true));
}
?>

关键说明

  1. 参数化查询:用?作为占位符,通过$params数组传递用户输入,sqlsrv会自动处理输入的转义,彻底避免SQL注入。
  2. 结果校验:通过sqlsrv_has_rows()判断查询结果是否存在记录,存在则说明用户名和密码匹配,认证成功。
  3. 错误处理:添加了连接失败、查询失败的错误输出(生产环境注意不要暴露具体错误信息,避免泄露数据库敏感信息)。
  4. 资源释放:使用sqlsrv_free_stmt()和sqlsrv_close()释放查询资源和数据库连接,避免资源浪费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:45:35