【问题标题】:How to chain dropdown boxes using PHP and MYSQL?如何使用 PHP 和 MYSQL 链接下拉框?
【发布时间】:2016-01-10 20:16:11
【问题描述】:

这是我的数据库:

          [tblset]              |     [tblyear]    |    [tbl_coursetype]
ID, setname, setyear, setcours  |   ID, YearName   | course_no, course_desc   
------------------------------  | ---------------- | -----------------------
1      A        1         1     |   1   1st Year   |     1          BSIT
2      B        3         2     |   2   2nd Year   |     2          BSED
                                |   3   3rd Year   |
                                |   4   4th Year   |
                                |   5   5th Year   |
  • 这是我的代码:

        <form role="form" action="save_stud.php" method="post">
            <div class="form-group">
            <label>First Name</label>
            <input type="text" name="studfname" class="form-control" required>
            </div>
            <div class="form-group">
            <label>Last Name</label>
            <input type="text" name="studlname" class="form-control" required>
            </div>
    
    
            <div class="form-group">
            <label>Student Course</label> 
            <select name="studcourse" class="form-control">
                      <?php
    
                            // Five steps to PHP database connections:
    
                            // 1. Create a database connection
                            //      (Use your own servername, username and password if they are different.)
                            //      $connection allows us to keep refering to this connection after it is established
                            $connection = mysql_connect("localhost","root",""); 
                            if (!$connection) {
                                die("Database connection failed: " . mysql_error());
                            }
    
                            // 2. Select a database to use 
                            $db_select = mysql_select_db("studsystem",$connection);
                            if (!$db_select) {
                                die("Database selection failed: " . mysql_error());
                            }
    
                        ?>
    
                <?php
                    $result = mysql_query("Select setcours, course_desc 
                        from tblset, tbl_coursetype 
                        where tbl_coursetype.course_no=tblset.setcours 
                        group by setcours", $connection);
    
                        if (!$result) {
                        die("Database query failed: " . mysql_error());
                        }
    
    
                      // 4. Use returned data
                            while ($row = mysql_fetch_array($result)) {  
                                echo "<option value=\"{$row[0]}\">{$row[1]}</option>";  
    
                            }
    
                ?>
    
            </select> 
            </div>
    
    
            <div class="form-group">
            <label>Student Year</label> 
            <select name="studyear" class="form-control">
    
                      <?php
                            // Five steps to PHP database connections:
    
                            // 1. Create a database connection
                            //      (Use your own servername, username and password if they are different.)
                            //      $connection allows us to keep refering to this connection after it is established
                            $connection = mysql_connect("localhost","root",""); 
                            if (!$connection) {
                                die("Database connection failed: " . mysql_error());
                            }
    
                            // 2. Select a database to use 
                            $db_select = mysql_select_db("studsystem",$connection);
                            if (!$db_select) {
                                die("Database selection failed: " . mysql_error());
                            }
    
                        ?>
    
                    <?php
                    $result = mysql_query("Select setyear, YearName 
                        from tblset, tblyear
                        where tblyear.ID=tblset.setyear 
                        group by setyear", $connection);
    
                        if (!$result) {
                        die("Database query failed: " . mysql_error());
                    }
                      // 4. Use returned data
                            while ($row = mysql_fetch_array($result)) {  
                                echo "<option value=\"{$row[0]}\">{$row[1]}</option>";  
    
                            }
    
                ?>
    
    
            </select> 
            </div>
    
            <div class="form-group">
            <label>Section</label> 
            <select name="studset" class="form-control">
    
                      <?php
                            // Five steps to PHP database connections:
    
                            // 1. Create a database connection
                            //      (Use your own servername, username and password if they are different.)
                            //      $connection allows us to keep refering to this connection after it is established
                            $connection = mysql_connect("localhost","root",""); 
                            if (!$connection) {
                                die("Database connection failed: " . mysql_error());
                            }
    
                            // 2. Select a database to use 
                            $db_select = mysql_select_db("studsystem",$connection);
                            if (!$db_select) {
                                die("Database selection failed: " . mysql_error());
                            }
    
                        ?>
    
                <?php
                    $result = mysql_query("SELECT * FROM tblset t LIMIT 0,1000", $connection);
                        if (!$result) {
                        die("Database query failed: " . mysql_error());
                    }
    
                      // 4. Use returned data
                            while ($row = mysql_fetch_array($result)) {  
                                echo "<option value=\"{$row[0]}\">{$row[1]}</option>";  
    
                            }
    
                ?>
    
    
            </select> 
            </div>
    

-这里有一些截图。

现在,我很困惑,因为BSIT 只有1st year,但是当我每次选择BSIT 时,第二个下拉菜单也会出现3rd year,事实上,3rd year 仅适用于BSED

简而言之,我希望当我每次选择课程时,它会自动更改第二个下拉菜单及其对应的年级/s。

我是 php 和 mysql 的新手,我不知道如何解决这个问题。我一直在尝试通过互联网搜索任何代码近 1 周,但没有人在工作,也许我不知道如何,所以我无法追踪它为什么这样做。

有人可以帮助我吗?任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: php jquery mysql database chain


【解决方案1】:

了解 AJAX(异步 JavaScript 和 XML)。它将帮助您解决自动更改第二个下拉菜单及其对应的年级/秒问题。

AJAX 是一组用于客户端的 Web 开发技术,用于创建异步 Web 应用程序。简而言之,您将能够从服务器异步发送和检索数据,换句话说,您只能根据先前的用户输入重新加载(并因此更改内容)一个(或多个)下拉列表(无需重新加载整个页面)。据我了解,这就是您想要的。

否则你也可以在不使用 AJAX 的情况下实现这一点,但它需要重新加载整个页面。

【讨论】:

    【解决方案2】:

    您必须在 DOM 加载后使用 Javascript 来更改页面的内容。您可以在选择发生变化时刷新页面,但如果我是你,我会选择

    1. 将组合加载到 JS 对象中
    2. 使用 ajax 异步获取它们。

    您的情况相当简单,所以在我看来,后者会导致相当不必要的请求开销;如果你没有 50 多门课程和很多年份组合,我会以第一种方式处理它。这是我正在谈论的非常简单版本,为了简单起见使用 jQuery:http://jsfiddle.net/eng2e9fu/

    var courses = {
        1:{years:2},
        2:{ years:3},
        };
    
    $("#course").change(function(){
        var course = $(this).val();
        var options = [];
        for(var i = 1; i <= courses[course].years; i++)
        {
            options.push($("<option/>").attr("value",i).html("Year "+i));
        }
    
        $("#year").html(options);
    });
    

    【讨论】:

    • 如何使用 MYSQL 查询来做这些?
    • 您想专注于生成courses 对象。你在这里问了很多事情,而在 stackoverflow 上你不会得到一个准备好复制粘贴的答案。提示是:在上述情况下,尝试专注于生成“课程”对象。一般的想法是将您的数据操作到 PHP 数组中,然后使用 json_encode 将其输出到有效的 JSON(javascript 可以理解)。 var courses = &lt;?=json_encode($array)?&gt;;
    【解决方案3】:

    首先备份您的代码。并且,使用我的代码。我100%肯定,它会起作用。但是,保持耐心。并且,以非常冷静的方式使用此代码。理解每一行。

    dbconnect.php (在需要数据库连接的每个页面中都包含这个文件。为什么要为数据库连接编写每次代码)

    <?php
    $connection = mysql_connect("localhost","root",""); 
    if (!$connection) {
        die("Database connection failed: " . mysql_error());
    }
    
    $db_select = mysql_select_db("studsystem",$connection);
    if (!$db_select) {
        die("Database selection failed: " . mysql_error());
    }
    ?>
    

    您的模式页面

    <?include('dbconnect.php');?>
    .
    //Your rest of the code
    .
    <form role="form" action="save_stud.php" method="post">
        <div class="form-group">
            <label>First Name</label>
            <input type="text" name="studfname" class="form-control" required>
        </div>
        <div class="form-group">
            <label>Last Name</label>
            <input type="text" name="studlname" class="form-control" required>
        </div>
        <div class="form-group">
            <label>Student Course</label> 
            <select name="studcourse" class="form-control Courses">
                <option value="">Select Courses</option>
                <?
                    $QueryCourses = mysql_query("SELECT tblset.setcours, tbl_coursetype.course_desc 
                    FROM tblset, tbl_coursetype WHERE tbl_coursetype.course_no=tblset.setcours", $connection);
                    while ($RowCourses = mysql_fetch_array($result))
                    {?>
                    <option value="<?echo $RowCourses[0];?>"><?echo $RowCourses[1];?></option>
                    <?}?>
            </select>
        </div>
        <div class="form-group StudentYearDiv">
            <label>Student Year</label> 
            <select name="studyear" class="form-control">
                <option value="">Select Year</option>
            </select>
        </div>
        <div class="form-group">
            <label>Section</label> 
            <select name="studset" class="form-control">
                <option value="Select Section"></option>
                <?
                $QuerySection=mysql_query("SELECT * FROM tblset LIMIT 0,1000", $connection);
                while($RowQS=mysql_fetch_array($QuerySection))
                {?>
                    <option value="<?echo $RowQS[0];?>"><?echo $RowQS[1];?></option>
                <?}?>
            </select>
        </div>
        .
        .
        .
        //Your rest of the code
    </form>
    

    在您的页脚中添加此代码。 如果添加后不起作用,则将此代码仅保留在您的模态页面中。

    <script>
        $('.Courses').change(function(){
            var CourseNo=$('.Courses').val();
            $.ajax({url:"Ajax-ShowStudentYear.php?CourseNo="+CourseNo,cache:false,success:function(result){
                $('.StudentYearDiv').html(result);
            }});
        });
    </script>
    

    创建一个 Ajax-ShowStudentYear.php 页面。 (请记住,如果您想更改此页面名称。然后,也要更改您的&lt;script&gt;&lt;/script&gt; 标签。两者都是相关的)

    <?
    include('dbconnect.php');
    extract($_GET);
    
    $QueryYearNo=mysql_query("SELECT setyear FROM tblset WHERE setcours='$CourseNo'",$connection);
    while($RowYN=mysql_fetch_array($QueryYearNo))
    {
        $YearNo=$RowYN['setyear'];
    }
    ?>
    
    <label>Student Year</label> 
    <select name="studyear" class="form-control">
        <?
        $QueryYear=mysql_query("SELECT ID, YearName FROM tblyear WHERE ID='$YearNo'",$connection);
        while($RowQY=mysql_fetch_array($QueryYear))
        {?>
            <option value="<?echo $RowQY['ID'];?>"><?echo $RowQY['YearName'];?></option>
        <?}?>
    </select>
    

    干杯!享受编码:) :)

    【讨论】:

    • 感谢您帮助我,先生。我认为这确实有效,但有一件事,$QueryCourses 查询是否有任何故障?我在第一个下拉框中什么都没有。
    • 嗨@RoyalRyt。我没有更改您的查询。但是,我观察到的是您的查询是错误的。由于您要获取 2 列不同的表..您必须使用我的方式。我已经编辑了我的答案。检查一下。
    【解决方案4】:

    使用您在问题中提供的数据库结构,您可以使用 AJAX 实现结果。

    1. 首先查询以获取您的课程...

      准备($sql); $查询->执行(); $results = $query->fetchAll(); $totalRows = $query->rowCount(); ?>
    2. 在您的&lt;head&gt; 标签中包含该函数

      函数 getYears(val) { $.ajax({ 类型:“发布”, url: "get-year.php", 数据:'id='+val, 成功:函数(数据){ $("#year-list").html(数据); } }); }
    3. 表格

      学生课程
      选择课程 "> 学生年
      选择年份
    4. 获取可用年份的 sql...get-year.php

      准备($sql); $query->bindValue(':id', $id, PDO::PARAM_INT); $查询->执行(); $results = $query->fetchAll(); $totalRows = $query->rowCount(); ?>
       <option value="">Select Year</option>
      
       <option value="<?php echo $row["ID"]; ?>"><?php echo $row["YearName"]; ?></option>
      

    当然,您可以更改您的连接包含行以匹配您使用的内容 & $conn-&gt; 到您当前使用的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多