基于下拉选择切换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
相关产品推荐
相关产品推荐

