2016-12-14 130 views
0

正如我試圖在標題中描述的,我從一個MYSQL數據庫中選擇行的問題取決於同一頁上另一個下拉列表的ID。我只用了2個月左右的時間,現在需要幫助。PHP MYSQL - 下拉選擇取決於前一個下拉列表

我有一個類別表,下面的標題。

| id |名稱| PARENT_ID |

還有父類別,其parent_id爲0。父類別的子類別爲其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的初學者,我會非常感謝任何幫助或建議。

+1

這個問題可能已經解決過。 – Strawberry

+0

'var_dump()','print_r()'和'echo'是你的朋友。在各個地方進行調試。所以首先檢查你的'$ p_result',接下來的'$ c_query'等...... – user1801810

回答

0

你的第二個查詢根據它們的parent_id檢索子類別沒有任何問題,所以你很好。你可以像這樣測試很容易:

SELECT * FROM類別WHERE PARENT_ID = 1 ORDER BY ID ASC

你是如何提供價值$類別[「身份證」]因爲有沒有在你的代碼中創建這個具有'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); 
+0

謝謝你的回覆,湯姆。雖然我是一個PHP和MYSQL的相對初學者,但我真的是JQuery的新手。 對於您在myselect.php中提供的腳本,我想澄清實際發生的情況。當從類別[]中選擇一個類別時,所選類別的任何一個孩子將從列表中刪除?並且將所選類別中的任何一個添加到列表數據中,然後針對數據列表查詢子查詢。 – ochhii

+0

@ochhii你是對的。無論何時單擊類別表單元素,本例中都將刪除#subcategory的子元素(選項)。原因如下:比方說,您將PHP開發人員和Python開發人員作爲Software Development的父項的兩個條目。如果每次通過.append()複製它們時都沒有刪除選項。 –

相關問題