Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多个相关下拉菜单_Php_Jquery_Html_Ajax_Drop Down Menu - Fatal编程技术网

Php 多个相关下拉菜单

Php 多个相关下拉菜单,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 | | --- | ------ | ------- | | --- | ------- | ------------- | --- | --- | ---

我被多个动态下拉列表困住了。这就是我试图解决的问题。我在数据库中存储了以下四个示例表,希望动态访问这些值。 下拉列表2依赖于下拉列表1,下拉列表4依赖于下拉列表2和3

| 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
    }
}