簡體   English   中英

如何使用復選框選擇從MYSQL子表中獲取數據?

[英]How to get data from MYSQL child table using checkbox selection?

我在嘗試使用清單中已選中的選項嘗試從MYSQL檢索數據時遇到了一些麻煩。

我在MYSQL中有2個表,第1個用於學位名稱-自動作為檢查表輸出,第二個用於與每個不同學位名稱相關的課程。 這兩個表都是關系表,即它們被連接為“課程”是“ degree_names”的子表。

所以我的問題是...我該怎么做才能更改代碼,以使清單中選中的選項(2個或更多)連接到我的“ degree_names”表,然后從菜單中獲取與這些學位相關的所有課程“課程”表?

到目前為止,這是我的代碼,該代碼直接從degree_name表輸出所有度數的清單

        <?php
                $username = "root";
                $password = "";
                $hostname = "localhost";

                $dbname = "major_degrees";
                $str='';

                // Create connection
                $conn = new mysqli($hostname, $username, $password, $dbname);

                // Check connection
                if ($conn->connect_error) {
                    die("Connection failed: " . $conn->connect_error);
                } 

                $sql = "SELECT degree FROM degree_names";
                $result = $conn->query($sql);

                $out = '';
                $cnt = 0;
                if ($result->num_rows > 0) {

                    // output data of each row from degree_names database as a checklist
                    while($row = $result->fetch_assoc()) {
                        $cnt++;
                        $out .= '<input id="cb_' .$cnt. '" class="checkChange" type="checkbox" name="check" value="ch" id="checky" />' .$row['degree']. '<br/>';

                    }
                    echo $out;  

                } 

        ?>
    </b>
    </br>
    <input class="btn-checkout" type="submit" value="Submit" id="submitBtn" disabled="disabled"/>
    </div>
    </div>


        </form>
        </body>
        <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
        <script>
            $('.checkChange').change(function() {
                var count = 0;
                var len = $("[name='check']:checked").length;               

                // keep a counter for how many boxes have been checked
                $('#checkboxes input:checked').each(function() {
                    count++;
                });

                // if 2 boxes are checked off then disable the rest
                if (count == 2) {
                    $('#checkboxes input:not(:checked)').each(function() {
                        $(this).attr("disabled", true);

                    }); 

                } 
                // else keep other options enabled
                else {
                    $('#checkboxes input:not(:checked)').each(function() {
                        $(this).removeAttr('disabled');
                    });                                     
                }   

                //if exactly 2 boxes are checked off then enable the submit button, or else keep is disabled
                if ($(this).is(":checked") && count == 2) {
                        $("#submitBtn").removeAttr("disabled");
                } else {
                        $("#submitBtn").attr("disabled", "disabled");
                }

            });

        </script>

    </html>

首先讓我們清除majorscourses表之間的關系:

您的majors表如下所示:

 degree_id | TotalCredits |    degree_name
-----------+--------------+--------------------
     1     |      8       |     Computer Science
     2     |     8.5      |      Mathematics
     3     |      8       |    Music and Culture

courses表:

 id | course_id | degree_id |            course_name               | credits | pre-requisite | last-offered | status |
----+-----------+-----------+--------------------------------------+---------+---------------+--------------+--------+
 1  |   CSCA08  |     1     | Introduction to Computer Science I   |   0.5   |     CSCA48    |   Fall 2015  |        |
 2  |   CSCA48  |     1     | Introduction to Computer Science II  |   0.5   |     CSCB07    |  Winter 2015 |        |
 3  |   MATA23  |     2     |         Linear Algebra I             |   0.5   |     MATB24    |   Fall 2015  |        |

為什么每個復選框只有一個value 將這些復選框的值設置為majors表的degree_id 首先將查詢更改為:

$sql = "SELECT degree_id, degree_name FROM majors";

然后將復選框的值設置為:

$out .= '<input id="cb_' .$cnt. '" class="checkChange" type="checkbox" name="check" value="'.$row['degree_id'].'" id="checky" />' .$row['degree_name']. '<br/>';

然后讓我們有一個空表要在其中顯示數據:

<table id="course_table">
</table>

然后使用Ajax進行顯示:

$(document).on("change", ".checkChange", function(){ /* WHEN A CHECK BOX HAS BEEN TICKED */

     var counter = 0;

     /* COUNT ALL THE CHECKED CHECK BOXES */
     $(".checkChange").each(function(){
         if(this.checked){
             ++counter;
         }
     });

     if(counter == 2){ /* IF CHECKED CHECK BOXES REACHED TWO */
         /* DISABLE OTHER UNCHECKED CHECK BOXES */
         $(".checkChange").each(function(){
             if(!this.checked){
                 $(this).prop("disabled", true);
             }
         });
     } else {
         /* ENABLE ALL CHECK BOXES */
         $(".checkChange").prop("disabled", false);
     }

     $("#course_table").empty(); /* EMPTY THE TABLE */

     $('#checkboxes :checked').each(function() { /* CHECK EACH CHECKED CHECK BOXES */

         var degid = $(this).val(); /* GET THE VALUE OF THE CHECKED CHECK BOX */

         $.ajax({ /* CALL AJAX */
             type: 'POST', /* METHOD TO USE TO PASS THE DATA */
             url: 'get.php', /* FILE WHERE TO PROCESS THE DATA */
             data: { 'degid' : degid }, /* DATA TO BE PASSED */
             success: function(result){ /* GET THE RESULT FROM get.php */
                 $("#course_table").append(result); /* ADD THE COURSES RESULT TO THE HTML TABLE */
             }
         }); /* END OF AJAX */

     }); /* END OF CHECKING EACH CHECKED CHECK BOXES */

}); /* END OF IF A CHECK BOX HAS BEEN TICKED */

您可能會注意到,我們將處理get.php中的值,因此讓我們創建此文件。 讓我們使用准備好的語句

// INCLUDE YOUR DATABASE CONNECTION
$conn = new mysqli('localhost', 'root', '', 'major_degrees');

// CHECK CONNECTION
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(!empty($_POST["degid"])){

    $stmt = $conn->prepare("SELECT course_name FROM courses WHERE degree_id = ?"); /* PREPARE YOUR QUERY */
    $stmt->bind_param("i", $_POST["degid"]); /* BIND THE SUBMITTED DATA TO YOUR QUERY; i STANDS FOR INTEGER */
    $stmt->execute(); /* EXECUTE QUERY */
    $stmt->bind_result($coursename); /* BIND RESULT TO THIS VARIABLE */
    while($stmt->fetch()){ /* FETCH ALL RESULTS */
        echo '<tr>
                  <td>'.$coursename.'</td>
              </tr>';
    }
    $stmt->close(); /* CLOSE PREPARED STATEMENT */

}
/* WHAT YOU ECHO/DISPLAY HERE WILL BE RETURNED TO degree.php */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM