Php 多个相关下拉菜单
我被多个动态下拉列表困住了。这就是我试图解决的问题。我在数据库中存储了以下四个示例表,希望动态访问这些值。 下拉列表2依赖于下拉列表1,下拉列表4依赖于下拉列表2和3Php 多个相关下拉菜单,php,jquery,html,ajax,drop-down-menu,Php,Jquery,Html,Ajax,Drop Down Menu,我被多个动态下拉列表困住了。这就是我试图解决的问题。我在数据库中存储了以下四个示例表,希望动态访问这些值。 下拉列表2依赖于下拉列表1,下拉列表4依赖于下拉列表2和3 | ID | name | percent | | ID | name | languageValue | 100 | 75 | 501 | | --- | ------ | ------- | | --- | ------- | ------------- | --- | --- | ---
| ID | name | percent | | ID | name | languageValue | 100 | 75 | 501 |
| --- | ------ | ------- | | --- | ------- | ------------- | --- | --- | --- |
| 1 | 100% | 100 | | 1 | English | english | y | y | n |
| 3 | 75% | 75 | | 2 | German | german | y | n | n |
| 2 | 50% 1 | 501 | | 3 | French | french | n | n | y |
Table 1 (Dropdown 1) Table 2 (Dropdown 2)
| ID | CoreSubjectName | CoreSubjectValue | | ID | MinorSubjectName | MinorSubjectValue |
| --- | --------------- | ---------------- | | --- | ---------------- | ----------------- |
| 1 | Maths | maths | | 1 | English | english |
| 2 | Politics | politics | | 2 | Politics | politics |
| 3 | Chemics | chemics | | 3 | Chemics | chemics |
Table 3 (Dropdown 3) Table 4 (Dropdown 4)
我检索第一个下拉列表的值,如下所示。我把收尾标签忘了
<select name="percent" id ="percent" onchange="getPercent(this.value);">
<option value="">Choose Percent</option>
<?php
$PercentPost = $_POST["percent"];
$PercentQuery = "SELECT percent, name FROM percentTable";
$results=mysqli_query($conn, $anteilQuery);
//loop
while ($row = mysqli_fetch_array($results)){
echo '<option value="'.$row[percent].'">'.$row[name].'</option>';
}
?>
<select name="language" id="language">
<option value=""></option>
</select>
到目前为止,form.php包含以下代码段:
$PercentPost = $_POST["percent"];
if (!empty($_POST["percent"])) {
$query="SELECT name, languageValue FROM table2 WHERE `$PercentPost`='y'";
$results = mysqli_query($conn, $query);
while ($row = mysqli_fetch_array($results)){
echo '<option value="'.$row[languageValue].'">'.$row[name].'</option>';
}
}
这很好,但现在我不知道如何动态填充下拉列表4。在下拉列表4中,选择的值2和3不应是可选的。我知道这必须用js的ajax来完成,但我不知道怎么做
有人能帮我吗?
太多了 因此,您将以禁用属性或不可见样式=显示:无;的形式加载下拉列表4 我将在下拉列表2和3中添加一个默认值,如select。。。如果值为0或-1,请参见下一个PHP代码示例 然后我将为下拉列表2和3添加onchange属性,它们都将调用相同的js函数:
function loadDD4Values(){
if ($('#language').val() <> 0 && $('#coreSubject').val() <> 0){
//ajax function
$.ajax({
type: "POST",
url: "form.php", //You can detect what to do based on params, or have a different PHP page
data: "language="+$('#language').val() + "&coreSubject=" + $('#coreSubject').val() ,
success: function(data){
$("#minorSubject").html(data);
$('#minorSubject').style.display = '';//or remove attribute disabled, also if you want you can disable/hide DropDown 2 and 3 here
}
});
}else{
$('#minorSubject').style.display = 'none'; //or add attribute disabled
}
//Also here you can decide what to do if the user modify DropDown 2 or 3 for example, reset the DropDown 4 values, or just the selected one:
$('#minorSubject').selectedValue = 0;
}
那么您的PHP可以是:
if( isset($_POST['percent']) ){
// Your code from the DropDown 2
}else if (isset($_POST['language']) && isset($_POST['coreSubject'])){
//You didn't had sql injection protection in your question code !!!
$language = mysql_real_escape_string($_POST['language']);
$coreSubject = mysql_real_escape_string($_POST['coreSubject']);
$query="SELECT ... FROM minorSubject WHERE `$language`='...' AND `$coreSubject`='...'";
$results = mysqli_query($conn, $query);
echo '<option value="0">Select ...</option>'; // A default row
while ($row = mysqli_fetch_array($results)){
echo '<option value="'.$row[ID].'">'.$row[...].'</option>'; //Use ID for the value, It's made for that
}
}
代码没有经过测试,因此会出现一些拼写错误,根据您自己的使用情况进行调整
请随时询问补充信息。哇,太酷了!它就像一个符咒,我学到了新东西!非常感谢你!但是,增加一些附加条件怎么样?例如:75%的学生不允许选择辅修科目?我会将这些特殊情况添加到php中,并将loadDD4Value函数与第一个下拉列表连接起来吗?或者在php中为每种情况创建表单更好吗?是的,我将在loadDD4Value中读取百分比值或其id。我将在更新2或3时读取其值,不需要将loadDD4Value添加到1的onChange事件中。然后,我将把3个参数传递到同一个php页面,与前面一样:如果只设置了百分比,我将加载2和3下拉列表,如果设置了百分比,语言和coreSubject,我将加载返回值,只有当百分比为75%时,才加载第4个下拉列表。在js中,我将检查php页面是否返回了0个选项或默认选项,我将禁用或隐藏第4个下拉列表。此外,我不知道您是否仅为示例添加了75%的条件。但最好在SQL查询中使用percent_id,并在数据库中确定SQL请求是否返回值;
if( isset($_POST['percent']) ){
// Your code from the DropDown 2
}else if (isset($_POST['language']) && isset($_POST['coreSubject'])){
//You didn't had sql injection protection in your question code !!!
$language = mysql_real_escape_string($_POST['language']);
$coreSubject = mysql_real_escape_string($_POST['coreSubject']);
$query="SELECT ... FROM minorSubject WHERE `$language`='...' AND `$coreSubject`='...'";
$results = mysqli_query($conn, $query);
echo '<option value="0">Select ...</option>'; // A default row
while ($row = mysqli_fetch_array($results)){
echo '<option value="'.$row[ID].'">'.$row[...].'</option>'; //Use ID for the value, It's made for that
}
}