gpt4 book ai didi

PHP MYSQL - 下拉选择依赖于先前的下拉菜单

转载 作者:行者123 更新时间:2023-11-29 19:44:14 25 4
gpt4 key购买 nike

正如我试图在标题中描述的那样,我在根据同一页面上另一个下拉列表的 ID 从 MYSQL 数据库中选择行时遇到问题。我现在只使用 mysql 和 php 2 个月左右,需要帮助。

我有一个带有以下标题的类别表。

|id |名称 |父 ID|

存在父类别,其parent_id为0。还有子类别,其父类别的id作为其parent_id,最大深度为1个子类别。例如:

软件开发是一个父类别,id = 18,parent_id = 0。PHP 开发人员是一个子类别,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检索子类别没有任何问题,因此您做得很好。您可以像这样轻松测试:

从类别中选择*,其中parent_id = 1 按 ID ASC 排序

由于代码中没有任何内容使用“id”索引创建此数组,因此如何向 $categories['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);

关于PHP MYSQL - 下拉选择依赖于先前的下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com