- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如我试图在标题中描述的那样,我在根据同一页面上另一个下拉列表的 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/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!