За последние 24 часа нас посетили 18730 программистов и 1650 роботов. Сейчас ищут 1780 программистов ...

Список с многоуровневой зависимостью

Тема в разделе "JavaScript и AJAX", создана пользователем dfii, 21 янв 2017.

  1. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    Я не программист, я по железу.
    Но прижало и возникла необходимость создать для поступающей на ремонт техники создать небольшую бд.
    Для регистрации техники выбираем из динамических списков сначало отдел, далее с помощью javascript для второго окна формируется список категории техники отфильтрованный в запросе во выбранному ранее отделу, список для третьего окна должен фильтроваться как по выбранной категории, так и по выбранному отделу, но вот как получить значение выбраного отдела ума не приложу. Чтобы закончить свой проект, осталось решить только эту задачу, но времени в связи с загруженностью на изучение теории нет. Данные задачи приложил. Данные в бд для простоты урезал.
     

    Вложения:

    • select3.zip
      Размер файла:
      36,4 КБ
      Просмотров:
      1
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    два AND в WHERE, если в разных таблицах, то например sql JOIN по этим таблицам,
    только почему тема в JavcaScript разделе? Сложность не в SQL запросе?
     
  3. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    Сложность не в sql, в пример условие не стал включать чтобы скрипт корректно работал.
    Проблема в передачи значения поля sp_otdel для условия WHERE id_location = $sp_otdel в запросе для формирования списка номеров техники. По аналогии снимаю значение выбранной категории, но как для этого же $.Get отправить в sp_num_tech.php ещё и значение ранее выбранного отдела. Если две переменных, например $sp_category и $sp_rosp получать соответствующие значения, то проблем применения двойного условия через AND не будет.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я мало что понял. Если SQL запросы готовы, то все не достающие данные для них можно у пользователя узнать, так как он выбирает select тегом из списка, что он выбрал можно узнать и передавать в PHP который уже и сформирует SQL
     
  5. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    В прикреплённом архиве есть всё для понимания, если нет возможности посмотреть наглядно подключив файлы к серверу, то я выложу код сюда
     
  6. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    PHP:
    1. <html>
    2. <head>
    3. <meta charset="utf-8" />
    4. <title>Ремонт - Поступление</title>
    5. <script type="text/javascript" src="jquery.js"></script>
    6. <script type="text/javascript" src="selects.js"></script>
    7. </head>
    8. <body>
    9. <?php
    10.     function sp_otdel()      {
    11.                 $dbc = mysqli_connect ('localhost', 'root', '', 'select3');
    12.                 $query = "SELECT * FROM tbl_otdel ORDER BY name";
    13.                 $query_res = mysqli_query ($dbc, $query);
    14.                 $sp_otdel = array();
    15.                 while($row = mysqli_fetch_assoc($query_res))    {
    16.                         $sp_otdel[] = $row;                              }
    17.                 return $sp_otdel;        }
    18.         $sp_otdel = sp_otdel();
    19. ?>
    20.     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    21.                 <select name='sp_otdel' id='sp_otdel'>
    22.                 <option value="0"> - Выберите отдел - </option>
    23.                 <?php foreach($sp_otdel as $item)       {echo "<option value='".$item['id']."'>".$item['name']."</option>";} ?>
    24.                 </select><br /><br />
    25.              
    26.                 <select name='sp_category_tech' id='sp_category_tech' disabled="disabled">
    27.              <option value="0"> - Выберите категорию - </option>
    28.                 </select><br /><br />
    29.  
    30.                 <select name='sp_num_tech' id='sp_num_tech' disabled="disabled">
    31.                  <option value="0"> - Выберите номер - </option>
    32.                 </select><br /><br />
    33.     </form>
    34. </body>
    35. </html>

    Код (Javascript):
    1. $(document).ready(function () {
    2.     $('#sp_otdel').change(function () {
    3.         var sp_otdel = $('#sp_otdel').val();
    4.         var url = 'get_category_tech.php';
    5.      
    6.         $.get(
    7.             url,
    8.             "sp_otdel=" + sp_otdel,
    9.             function (result) {
    10.                 if (result.type == 'error') {
    11.                     alert('error');
    12.                     return(false);
    13.                 }
    14.                 else {
    15.                     var options = '';
    16.                  
    17.                     $(result.sp_category_tech).each(function() {
    18.                         options += '<option value="' + $(this).attr('id_category_tech') + '">' + $(this).attr('category') + '</option>';
    19.                     });
    20.                  
    21.                     $('#sp_category_tech').html('<option value="0"> - Выберите категорию - </option>'+options);
    22.                     $('#sp_category_tech').attr('disabled', false);
    23.                          
    24.                 }
    25.             },
    26.             "json"
    27.         );
    28.     });
    29.  
    30.  
    31. $('#sp_category_tech').change(function () {
    32. var sp_category_tech = $(this).val();
    33.          if (sp_otdel == '0') {
    34.         $('#sp_num_tech').html('<option>- Выберите номер -</option>');
    35.         $('#sp_num_tech').attr('disabled', true);
    36.         return(false);
    37.     }
    38.     $('#sp_num_tech').attr('disabled', true);
    39.         $('#sp_num_tech').html('<option>загрузка...</option>');
    40.                  var url = 'get_num_tech.php';
    41.      
    42.         $.get(
    43.             url,
    44.             "sp_category_tech=" + sp_category_tech,
    45.          
    46.             function (result) {
    47.                 if (result.type == 'error') {
    48.                     alert('error');
    49.                     return(false);
    50.                 }
    51.                 else {
    52.                     var options = '';
    53.                     $(result.sp_num_tech).each(function() {
    54.                         options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('num') + '</option>';
    55.                      
    56.                     });
    57.                     $('#sp_num_tech').html('<option value="0"> - Выберите номер - </option>'+options);      
    58.                     $('#sp_num_tech').attr('disabled', false);
    59.                  
    60.     }
    61.             },
    62.  
    63.  
    64.             "json"
    65.         );
    66.     });  
    67. });

    PHP:
    1. <?php
    2. $sp_otdel = @intval($_GET['sp_otdel']);
    3. $dbc = mysqli_connect ('localhost', 'root', '', 'select3' );
    4. $query = "SELECT tbl_number_tech.*, tbl_category.* FROM tbl_number_tech, tbl_category WHERE tbl_number_tech.id_location = $sp_otdel AND tbl_category.id = tbl_number_tech.id_category_tech GROUP BY tbl_category.category";
    5. $regs = mysqli_query($dbc, $query);
    6. if ($regs) {
    7.     $num = mysqli_num_rows($regs);    
    8.     $i = 0;
    9.     while ($i < $num) {
    10.        $sp_category_tech[$i] = mysqli_fetch_assoc($regs);
    11.        $i++;
    12.     }  
    13.     $result = array('sp_category_tech'=>$sp_category_tech);
    14. }
    15. else {
    16.     $result = array('type'=>'error');
    17. }
    18. print json_encode($result);
    19. ?>

    PHP:
    1. <?php
    2. $sp_category_tech = @intval($_GET['sp_category_tech']);
    3. $sp_otdel = ???
    4. $dbc = mysqli_connect ('localhost', 'root', '', 'select3' );
    5. $query = "SELECT * FROM tbl_number_tech WHERE id_category_tech = $sp_category_tech AND id_location = $sp_otdel";
    6. $regs = mysqli_query($dbc, $query);
    7. if ($regs) {
    8.     $num = mysqli_num_rows($regs);    
    9.     $i = 0;
    10.     while ($i < $num) {
    11.        $sp_num_tech[$i] = mysqli_fetch_assoc($regs);
    12.        $i++;
    13.     }  
    14.     $result = array('sp_num_tech'=>$sp_num_tech);
    15. }
    16. else {
    17.     $result = array('type'=>'error');
    18. }
    19. print json_encode($result);
    20. ?>


    В последнем спойлере объявлена переменная $sp_otdel = но как мне передать ей значение выбранного отдела из списка первого окна, проблема в том как передать для формирования 3-го списка значения первого и второго окна? По найденым в сети аналогиям передать не получается.
     
    #6 dfii, 21 янв 2017
    Последнее редактирование: 21 янв 2017
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Тогда попробуй без javascript сделать, так легче
     
  8. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    Легче то оно легче, вот только для каждого нового зависимого запроса в базу надо будет форму перезагружать. Такой вариант есть, но как крайняя мера.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Если такой вариант можешь реализовать, то в чём тогда проблема с javascript? Пусть пользователь хоть 10 значений выбирает, ты их потом можешь передать в запрос.
     
  10. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    Зависимые списки второй от первого, третий от второго, четвёртый от третьего и т.д. составить получиться, неполучается составить третий список зависимый от результатов первого и второго поля одновременно.
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @dfii надо ждать, может кто-то другой поймёт, потому что мне до сих пор не понятно что надо.
     
    dfii нравится это.
  12. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    На одном из форумов мне дали пищу для ума по этой теме:
    Код (Javascript):
    1.     $('form').submit(function(e) {
    2.         e.preventDefault();
    3.         $.get(this.action, $(this).serialize(), function(data) {
    4.             //ответ сервера
    5.         })
    6.     })

    К тому же видимо Бог не оставил, пришло на ум, что можно создать табличку для хранения оперативных данных, заносить туда значение полей, пользоваться ими в процессе заполнения формы а при отправки данных с формы в бд табличку чистить DELETE FROM.
     
    denis01 нравится это.
  13. dfii

    dfii Новичок

    С нами с:
    21 янв 2017
    Сообщения:
    8
    Симпатии:
    2
    Получил прямой ответ на вопрос, для тех кто ищет подобное решение:
    Код (Javascript):
    1. $('#sp_category_tech').change(function () {
    2. var sp_category_tech = $(this).val();
    3. var sp_otdel = $('#sp_otdel').val();
    4.         if (sp_otdel == '0') {
    5.    ...
    6. $.get(
    7.     url,
    8.     "sp_category_tech=" + sp_category_tech + "&sp_otdel=" + sp_otdel,
    Спасибо всем!
     
    denis01 нравится это.