jQuery ajax неограниченный динамический selectbox на основе родительских категорий

У меня есть таблица для категории:

| category_id | category_name | parent_id | 1 | Electronics | 0 | 2 | Mobile Phones | 1 | 3 | Computers | 1 | 4 | Iphone | 2 | 5 | Samsung Galaxy| 2 | 6 | Asus Laptop | 3 

Таким образом, эта таблица может хранить неограниченную категорию дочерних элементов для родительской категории.

Теперь то, что я пытаюсь достичь, скажем, что я выбираю «Электроника», тогда появится еще один selectbox со списком значений « Mobile Phones и Computers . И затем, если я выберу « Computers , появится еще один selectbox со списком значений Asus Laptop .

Я знаю, как закодировать динамический блок выбора, но он не работает с неограниченными подкатегориями.

Это должно работать так (на основе моего мышления).

  1. Пользователь выбирает категорию из первого selectbox
  2. Отправить ajax в getcategory.php
  3. getcategory.php узнает, есть ли какая-либо дочерняя категория из первой выбранной пользователем категории.
  4. ajax получает данные от getcategory.php
  5. если данные существуют, jQuery создает новый флажок select и помещает в него извлеченные данные.
  6. Пользователь выбирает подкатегорию из только что добавленного selectbox
  7. Отправить ajax в getcategory.php
  8. getcategory.php выясняет, есть ли какая-либо дочерняя категория из выбранной под пользователем категории.
  9. ajax получает данные от getcategory.php
  10. если данные существуют, jQuery создает новый флажок select и помещает в него извлеченные данные.
  11. и т. д. до тех пор, пока selectbox не будет иметь дочернюю категорию.

Как мне это достичь? Правильно ли это? или Есть ли другой способ обхода этого? спасибо

Solutions Collecting From Web of "jQuery ajax неограниченный динамический selectbox на основе родительских категорий"

Пожалуйста, используйте ниже код 1) conf.php

 <?php 

$ conn = mysqli_connect ('localhost', 'root', 'root', 'test') или die (mysqli_error ($ conn));?>

2) категория-dropdown.php

 <?php include 'conf.php'; $query = 'SELECT * FROM category WHERE parent_id=0'; $result = mysqli_query($conn,$query); $data = $result->fetch_all(MYSQLI_ASSOC); ?> <!DOCTYPE html> <html lang="en"> <head> <title>MultiDropdown</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4"> <select name="category" class="form-control category"> <option value="">Select</option> <?php foreach($data as $d){ echo '<option value="'.$d['id'].'">'.$d['category'].'</option>'; } ?> </select> </div> </div> <div id="dropdown_container"></div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <script> $(document).ready(function(){ $(document).on('change','.category',function(){ var id = $(this).val(); $.ajax({ url:'getcategory.php', type:'post', data:{'id':id}, success:function(data){ //alert(data); $('#dropdown_container').append(data); } }) }); }); </script> </body> </html> 

3) getcategory.php

 <?php include 'conf.php'; if(isset($_POST['id'])){ $id= $_POST['id']; $query = 'SELECT * FROM category WHERE parent_id = '.$id; $result = mysqli_query($conn,$query); $data = $result->fetch_all(MYSQLI_ASSOC); if(!empty($data)){ echo '<div class="row"> <div class="col-md-4"> <select name="category" class="form-control category"> <option value="">Select</option>'; foreach($data as $d){ echo '<option value="'.$d['id'].'">'.$d['category'].'</option>'; } echo '</select> </div> </div>'; } } ?> 

Чтобы найти неограниченные подкошки, не должно быть проблем: (я не знаю, почему у вас есть эта проблема, поскольку вы сказали, что у вас нет проблем с кодированием)

Для неограниченных подколов вы просто вызываете один и тот же SQL для возврата подколов или null:

 SELECT * FROM category WHERE parent_id = ? 

Следующая тема не в тему ————–

Это может потребоваться немного энергии, если вы хотите показать все продукты выбранной категории и всех ее детей.

Возможно, вам понадобится изменить свой дизайн, чтобы:

 id category ------ ---------- 11 Electronics 1101 Mobile Phones 1102 Computers 110101 Iphone 110102 Samsung Galaxy 110201 Asus Laptop 

Для вышеописанной версии max 99 child, если вам нужно больше, вы можете увеличить до 3-х цифр и т. Д.

тематическое исследование: найти все продукты, которые находятся в категории 11, и все его дети:

 SELECT * FROM products WHERE category_id like '11%'