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

PHP+MySQL基于内连接的登录系统无法正常登录求助

登录按钮无响应的问题排查与修复

我来帮你解决这个登录无响应的问题,你的代码主要是逻辑结构和几个细节出错了,下面一步步分析并修正:

主要问题点

  • 登录逻辑未被触发:核心的查询和结果判断代码不在登录提交的判断块内,导致点击按钮后只有表单值被获取,后续逻辑完全不执行。
  • 不必要的MD5加密:对学科名称做MD5加密后,和数据库里的明文字段无法匹配,导致查询不到结果。
  • 未初始化的变量:$errors数组和$result变量存在作用域或未定义的问题,会导致脚本静默失败。

修正后的完整代码

PHP 部分

<?php
session_start(); // 必须开启会话,否则$_SESSION无法正常使用
$errors = []; // 初始化错误数组,避免count()报错

// 请确保这里已经正确完成数据库连接,比如:
// $db = mysqli_connect('localhost', 'username', 'password', 'dbname');

// LOGIN USER
if (isset($_POST['login'])) {
    $name = mysqli_real_escape_string($db, $_POST['name']);
    $studentid = mysqli_real_escape_string($db, $_POST['studentid']);

    if (count($errors) == 0) {
        // 移除不必要的MD5加密,除非数据库里的discipline.name是MD5加密存储的
        // $name = md5($name); 
        $query = "SELECT discipline.name, student.studentid 
                  FROM discipline 
                  INNER JOIN student ON discipline.disciplineid = student.disciplineid 
                  WHERE discipline.name='$name' AND student.studentid='$studentid'";
        $result = mysqli_query($db, $query);

        if (mysqli_num_rows($result) == 1) {
            // 存储明文的学科名称到会话,方便后续页面使用
            $_SESSION['name'] = $name;
            $_SESSION['studentid'] = $studentid; // 可顺便存储学生ID
            header('location: Assessment.php');
            exit; // 跳转后必须exit,防止后续代码继续执行
        } else {
            array_push($errors, "Wrong username/password combination");
        }
    }
}

// logout
if (isset($_GET['logout'])) {
    session_destroy();
    unset($_SESSION['name']); // 对应登录时存储的会话键名
    unset($_SESSION['studentid']);
    header('location: index.php');
    exit;
}
?>

HTML 表单部分

<div class="form">
    <ul class="row justify-content-center">
        <form method="post" action="index.php">
            <!-- 新增错误信息显示区域,方便用户查看失败原因 -->
            <?php if (!empty($errors)): ?>
                <div class="error">
                    <?php foreach ($errors as $error): ?>
                        <p><?php echo $error; ?></p>
                    <?php endforeach; ?>
                </div>
            <?php endif; ?>
            
            <p>
                <label>Your ID </label>
                <input type="text" id="studentid" name="studentid" required />
            </p>
            <p>
                <label>name of discipline:</label>
                <input type="text" id="name" name="name" required />
            </p>
            <p>
                <button type="submit" class="btn" name="login">Login</button>
            </p>
        </form>
    </ul>
</div>

关键修改说明

  1. 包裹登录逻辑:把所有登录相关的代码(获取值、查询、结果判断)都放到if (isset($_POST['login']))块内,确保点击登录按钮时这些代码会执行。
  2. 移除MD5加密:如果数据库里的学科名称是明文,这行加密代码会导致查询匹配失败,直接删除即可;如果数据库里确实是MD5加密的,再保留这行。
  3. 初始化变量:添加$errors = [];避免count报错,同时确保$result在查询逻辑内定义,不会出现未定义的情况。
  4. 添加会话开启:必须在使用$_SESSION前调用session_start();,否则会话无法正常工作。
  5. 跳转后exit:使用header()跳转后,一定要加上exit;防止脚本继续执行后续代码。
  6. 添加错误提示:在表单里加入错误信息显示,方便用户知道登录失败的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:23:49