[英]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>
首先讓我們清除majors
與courses
表之間的關系:
您的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.