我正在研究大学系统的基于Web的应用程序。我想添加一个选项来选择会话,例如(2017-2018、2018-2019、2019-2020、2020-2021等)。管理员可以随时选择一个会话(例如2017-2018)来加载任何以前的会话,并且应该从数据库中加载相应的数据库。默认情况下,当前会话应在启动时加载。我正在使用mysql。
$conn = mysqli_connect('localhost', 'root', '', 'db2018');
加载会议2018-2019的数据库。上面的代码位于一个使用include语句调用的php文件中。
index.php具有登录信息,如果登录成功,则加载main.php
session_start();
include 'dbh.inc.php';
//rest of the code
$conn = mysqli_connect('localhost', 'root', '', 'db2018');
if (!$conn) {
die("connection failed". mysql_connect_error());
}
我希望默认数据库成为当前会话(管理员现在决定是db2018,现在是从2019年3月开始的下一年度会话的db2019),由管理员决定是哪个会话,如果选择另一个会话,则应将该会话的数据库加载到dbh.inc中.php
答案 0 :(得分:1)
我将在初始页面上设置年份范围数组,管理员/用户需要在其中选择年份,然后在用户选择年份将对数据库文件进行ajax调用时填充年份的下拉列表。
Main.php
<?php
$years = ['2017-2018', '2018-2019', '2019-2020', '2020-2021'];
?>
<select name="year" id="year">
<option value="0">Please Select Year</option>
<?php
foreach($years as $key=>$year){
echo "<option value=\"$year\">$year</option>";
}
?>
</select>
<script type="text/javascript">
$('document').ready(function(){
$('#year').on('change',function(){
var year = $(this).val();
$.ajax({
type : "POST",
data : {year:year},
url : "dbh.inc.php",
dataType : "json",
encode : true,
success : function(response){
if(response == "success"){
alert('database selected success');
//redirect to desired page
}else{
alert(response);
}
}
});
});
});
</script>
然后
dbh.inc.php
<?php
$year = isset($_POST['year']) ? $_POST['year']: null;
switch($year){
case '2017-2018':
$_SESSION['db'] = 'that year db';
break;
case '2018-2019':
$_SESSION['db'] = 'that year database';
break;
case '2019-2020':
$_SESSION['db'] = 'that year database';
break;
}
$conn = mysqli_connect('localhost', 'root', '', $_SESSION['db']);
if (!$conn) {
echo json_encode("connection failed". mysql_connect_error());
}else{
echo json_encode("success");
}
?>
答案 1 :(得分:0)
<select name="db_session">
<option value="db2018">2017-2018</option>
<option value="db2019">2018-2019</option>
<option value="db2020">2019-2020</option>
</select>
选择下拉菜单时,在会话变量中设置选定的数据库名称,然后重写以下代码以使用会话中选定的数据库名称
$conn = mysqli_connect('localhost', 'root', '', 'db2018');
答案 2 :(得分:0)
您可以创建2个功能,第一个功能用于初始连接,第二个功能根据用户选择的内容使用不同的数据库名称重新连接。
<?php
$dbName = date('Y');
function connectDB(){
$conn = mysqli_connect('localhost', 'root', '', $dbName);
}
function reconnectDB($dbName){
mysqli_close($conn);
$conn = mysqli_connect('localhost', 'root', '', $dbName);
}
?>
因此,每当用户更改上学日期时,您都可以使用所选的年份来调用reconnectDB函数。
答案 3 :(得分:0)
HTML表单:
<form>
<select name="year">
<option value="db2018">2017-2018</option>
<option value="db2019">2018-2019</option>
<option value="db2020">2019-2020</option>
</select>
<input type="submit">
</form>
PHP解析并设置要在连接中使用的SESSION:
<?php
//start session
session_start();
//if session is not set, set the default to 'db2018'
if(!isset($_SESSION['db_name']) || $_SESSION['db_name']==""){
$_SESSION['db_name'] = 'db2018';
}
//if the form is posted update the session
if(isset($_POST['year']) && $_POST['year']!=""){
$_SESSION['db_name'] = $_POST['year'];
}
//open connection using session variable
$conn = mysqli_connect('localhost', 'root', '', $_SESSION['db_name']);
?>