从下拉列表中基于选择选项选择mysql数据库

时间:2019-02-19 10:46:00

标签: php mysql database

我正在研究大学系统的基于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

main.php

session_start();

include 'dbh.inc.php';

//rest of the code

dbh.inc.php

$conn = mysqli_connect('localhost', 'root', '', 'db2018');

if (!$conn) {
    die("connection failed". mysql_connect_error());
}               

我希望默认数据库成为当前会话(管理员现在决定是db2018,现在是从2019年3月开始的下一年度会话的db2019),由管理员决定是哪个会话,如果选择另一个会话,则应将该会话的数据库加载到dbh.inc中.php

4 个答案:

答案 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']);
?>