簡體   English   中英

PHP MYSQL-下拉選擇取決於先前的下拉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM