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

基于下拉选择切换MySQL数据库的高校系统会话数据加载需求

我来给你一套实用的解决方案,完美适配你高校系统的会话数据库切换需求,一步步来实现:

高校系统会话数据库切换实现方案

1. 脱离硬编码,配置默认会话数据库

首先不要把数据库名硬编码在dbh.inc.php里,我们用一个配置文件来存储当前默认会话,后续切换默认不用改代码。创建config.php:

<?php
// config.php - 系统核心配置文件
// 当前默认会话数据库,2019年3月后直接修改这里为'db2019'即可
$default_session_db = 'db2018';

// 进阶可选:如果要让管理员在后台修改默认,可改成从配置表读取
// 示例:先连接mysql系统库读取配置表
// $temp_conn = mysqli_connect('localhost', 'root', '', 'mysql');
// $result = mysqli_query($temp_conn, "SELECT default_db FROM system_config LIMIT 1");
// $default_session_db = mysqli_fetch_assoc($result)['default_db'];
// mysqli_close($temp_conn);
?>

2. 给管理员添加会话选择UI

在登录后的main.php中,给管理员显示会话选择下拉框(记得先判断用户角色是管理员):

<?php
session_start();
// 仅管理员可见
if ($_SESSION['user_role'] === 'admin') {
    // 定义所有可用的会话映射,也可从数据库自动读取符合规则的库名
    $session_list = [
        'db2017' => '2017-2018学年',
        'db2018' => '2018-2019学年',
        'db2019' => '2019-2020学年'
    ];
?>
<div class="session-switch">
    <form method="post" action="switch_session.inc.php">
        <label>选择学年会话:</label>
        <select name="target_db">
            <?php foreach ($session_list as $db_name => $session_label): ?>
                <option value="<?php echo $db_name; ?>" 
                    <?php echo (isset($_SESSION['current_db']) && $_SESSION['current_db'] === $db_name) ? 'selected' : ''; ?>>
                    <?php echo $session_label; ?>
                </option>
            <?php endforeach; ?>
        </select>
        <button type="submit">切换会话</button>
    </form>
</div>
<?php } ?>

3. 处理会话切换逻辑

创建switch_session.inc.php来处理表单提交,将选中的数据库存入Session:

<?php
session_start();
// 验证管理员权限,非管理员直接跳转
if ($_SESSION['user_role'] !== 'admin') {
    header("Location: main.php");
    exit();
}

// 白名单验证,防止恶意数据库名注入
$allowed_dbs = ['db2017', 'db2018', 'db2019'];
if (isset($_POST['target_db']) && in_array($_POST['target_db'], $allowed_dbs)) {
    $_SESSION['current_db'] = $_POST['target_db'];
}
// 切换后返回主页面
header("Location: main.php");
exit();
?>

4. 修改dbh.inc.php动态连接数据库

更新你的数据库连接文件,优先使用Session中管理员选择的数据库,无选择时用默认配置:

<?php
// 确保Session已开启,避免重复开启的写法
if (!session_id()) {
    session_start();
}
include 'config.php';

// 确定要连接的数据库:管理员选择的会话优先,否则用默认
$target_db = isset($_SESSION['current_db']) ? $_SESSION['current_db'] : $default_session_db;

// 建立数据库连接
$conn = mysqli_connect('localhost', 'root', '', $target_db);

// 连接失败处理
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}
?>

注意:确保main.php中的session_start();在include 'dbh.inc.php';之前,或者用上面的if (!session_id()) session_start();避免重复开启Session的问题。

这样配置后,系统启动时会自动加载默认会话数据库,管理员可随时切换到任意历史会话,后续切换默认学年也不用修改核心代码,非常灵活。

内容的提问来源于stack exchange,提问作者S. Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:51:53