【问题标题】:Choosing a mysql database based on choice option from a dropdown list根据下拉列表中的选择选项选择 mysql 数据库
【发布时间】:2019-02-19 10:46:00
【问题描述】:

我正在开发基于网络的大学系统应用程序。我想添加一个选项来选择会话,例如(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

【问题讨论】:

  • 我不确定我是否了解您的需求,但我认为您不需要会话来做到这一点。只需简单的日期检查即可。
  • 所以将数据库参数设置为变量并在表单中设置。或者松开数据库参数并使用mysqli_db_select() 函数也可以根据一些用户输入来选择数据库
  • 是的,正如@Dohab 所说,您可以根据年份调用 $conn,会话对您的上下文没有用处
  • 伙计们,这只是对 SESSION 这个词的错误使用,可能应该使用财政年度
  • @RiggsFolly 是对的。糟糕的是,我使用了 session 这个词,你们把它理解为 $_SESSION 的东西。我所说的会议是指 2018-2019 年的学术会议......

标签: php mysql database


【解决方案1】:

我会在初始页面上有我的年份范围数组,管理员/用户需要在该页面中选择年份,然后填充年份的下拉列表,当用户选择年份时,只需对 db 文件进行 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");
}           

?>

【讨论】:

  • 非常感谢。但是@paddy 共享的解决方案更容易。无论如何,非常感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    <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');
    

    【讨论】:

      【解决方案4】:

      您可以创建 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 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        相关资源
        最近更新 更多