[英]PHP MYSQL - Drop down select dependant on a previous drop down
正如我試圖在標題中描述的那樣,我在根據同一頁面上另一個下拉列表的ID從MYSQL數據庫中選擇行時遇到問題。 我現在僅使用mysql和php已有2個月左右,需要幫助。
我有一個帶有以下標題的類別表。
| id | 名稱| parent_id |
有父類別,其parent_id為0。還有子類別,其父類別的ID作為其parent_id,最大深度為1個子類別。 例如:
軟件開發是id = 18且parent_id = 0的父類別。PHPDeveloper是id = 30且parent_id = 18的子類別。
我有一個下拉列表,可以在其中選擇要工作的類別,如下所示:
$p_query = "SELECT * FROM categories WHERE parent_id = 0 ORDER by id ASC";
$p_result = mysqli_query($con, $p_query) or die(mysqli_error($con));
$categories ='';
while($p_row = mysqli_fetch_assoc($p_result))
{
$categories .='<option class="option" value="p::'.$p_row['id'].'">' .$p_row['category_name'].'</option>';
}
<select name="categories[]" class="categories form-control" id="categories" style="width:100%" multiple>
<?php echo $categories;?>
</select>
這是正常的,沒問題。 但是,當我嘗試獲取第二個下拉列表以顯示其parent_id作為任何選定父類別的ID的可能類別時,我檢索了一個“未找到搜索結果”的下拉列表。 下面的代碼是我正在使用的:
$subcategories ='';
while($p_row = mysqli_fetch_assoc($p_result))
{
$c_query = "SELECT * FROM categories WHERE parent_id = ".$categories['id']." ORDER by id ASC";
$c_result = mysqli_query($con, $c_query) or die(mysqli_error($con));
while($c_row = mysqli_fetch_assoc($c_result))
{
$subcategories .='<option class="option" value="c::'.$c_row['id'].'">' .$c_row['category_name'].'</option>';
}
}
<select name="subcategories[]" class="categories form-control" id="subcategories" style="width:100%" multiple>
<?php echo $subcategories ?>
</select>
有什么我想念的嗎? 作為PHP和MYSQL的相對入門者,我將非常感謝任何幫助或建議。
第二個查詢基於子類的parent_id檢索子類沒有任何問題,因此您在這里很好。 您可以像這樣輕松進行測試:
SELECT * FROM category WHERE parent_id = 1 ORDER by id ASC
您如何為$ categories ['id']提供值,因為您的代碼中沒有任何內容創建帶有'id'索引的數組? 此外,您已經在使用一個名為$ categories的變量作為字符串,因此您應該在沒有充分理由的情況下不要重復使用該變量名。
既然出現了,您想根據對第一個多重選擇框的選擇來填充第二個多重選擇框,您將需要使用一些javascript + AJAX提交第二個查詢並將結果寫入第二個選擇器元素。
使用一些jquery應該會有所幫助。 嘗試這些示例,您就會明白。
myselect.php包含用於選擇類別的界面:
<?php
$con = mysqli_connect("host", "username", "password", "database");
$p_query = "SELECT * FROM categories WHERE parent_id = 0 ORDER by id ASC";
$p_result = mysqli_query($con, $p_query) or die(mysqli_error($con));
$categories ='';
while($p_row = mysqli_fetch_assoc($p_result))
{
$categories .='<option class="option" value="p::'.$p_row['id'].'">' .$p_row['category_name'].'</option>';
}
?>
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous">
</script>
</head>
<body>
Shift or Ctrl + Click to pick more than one<br />
<form id="categoryform" method="POST">
<select name="categories[]" class="categories form-control" id="categories" style="width:100%" multiple>
<?php echo $categories;?>
</select>
</form>
Here's what it contains<br />
<form method="POST">
<select name="subcategories[]" class="categories form-control" id="subcategories" style="width:100%" multiple DISABLED>
</select>
</form>
<script>
$(document).ready(function() {
$('#categories').click(function(){
$('#subcategories').children().remove().end();
var data = $('#categoryform').serialize();
$.post("mysubselect.php", data).done(function(data){
var response = JSON.parse(data);
for (var k in response){
$('#subcategories').append('<option class="option" value="c::' + response[k]['id'] + '">' + response[k]['category_name'] + '</option>');
}
});
});
})
</script>
</body>
</html>
這是腳本從AJAX請求返回數據的示例。
mysubselect.php:
<?php
$con = mysqli_connect("host", "username", "password", "database") or die(mysqli_error());
$result = array();
foreach ($_POST["categories"] as $k => $v) {
$category_token = explode('::', $v);
$category_id = mysqli_real_escape_string($con, $category_token[1]);
$query = mysqli_query($con, "SELECT * FROM categories WHERE parent_id = " . $category_id . " ORDER BY id ASC") or die(mysqli_error());
while($r = mysqli_fetch_assoc($query)){
$result[] = $r;
}
}
print json_encode($result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.