За последние 24 часа нас посетили 157980 программистов и 6326 роботов. Сейчас ищут 2732 программиста ...

Формирование массива из БД (AJAX)

Тема в разделе "Сделайте за меня", создана пользователем kuzmich, 12 фев 2023.

  1. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    40
    Симпатии:
    0
    всем привет!

    нужна ваша помощь.
    мне нужно сделать зависимые списки. делаю по данному примеру.

    я сделал таким образом:
    Код (Text):
    1.  <form action="" method="post">
    2. <select name="model" onchange="loadCar(this)">
    3.     <option>Модель</option>
    4.     <?php
    5.     require_once('settings/ajax.php');
    6.  
    7. $models_db = mysqli_query($db,"SELECT * FROM `section`");
    8. if (!$models_db)
    9. {
    10. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    11. exit(mysqli_error());
    12. }
    13. if (mysqli_num_rows($models_db) > 0){
    14. $models_db_row = mysqli_fetch_array($models_db);
    15.     do
    16.     {
    17.         echo '<option value="' . $models_db_row['title'] . '">' . $models_db_row['title'] . '</option>';
    18.     }
    19.     while ($models_db_row = mysqli_fetch_array($models_db));
    20. }
    21.  
    22.     ?>
    23. </select>
    24. <select name="series">
    25.     <option>Выберите модель</option>
    26. </select>
    27. <script>
    28. function loadCar(select){
    29.     var carSelect = $('select[name="series"]');
    30.     $.getJSON('settings/ajax.php', {
    31.         action:'getModels',
    32.         model:select.value
    33.     }, function(seriesList){
    34.         carSelect.html('');
    35.         $.each(seriesList, function(i){
    36.             carSelect.append('<option value="' + i + '">' + this + '</option>');
    37.         });
    38.     });
    39. }
    40. </script><input type="submit" value='OK'>
    41. </form>
    код AJAX ничего не изменял.

    потом массив для теста сделал таким:
    Код (Text):
    1. <?php
    2. $arModels = array(
    3.     'AC' => array(
    4.         '1-series' => '1-series',
    5.         '2-series' => '2-series',
    6.         '3-series' => '3-series',
    7.         '4-series' => '4-series',
    8.         '5-series' => '5-series',
    9.     ),
    10.  
    11. );
    12. ?>
    и все работает.

    если в данный момент я обращусь к AJAX то он мне выдаст такой ответ:
    Код (Text):
    1. {"1-series":"1-series","2-series":"2-series","3-series":"3-series","4-series":"4-series","5-series":"5-series"}
    формировать массив в ручную мне смысла нету, так как все данные лежат в базе.

    для того, чтобы вывести подобную строчку -
    Код (Text):
    1. {"1-series":"1-series","2-series":"2-series","3-series":"3-series","4-series":"4-series","5-series":"5-series"}
    я написал следующий код:
    Код (Text):
    1. <?php
    2. include('db.php');
    3.  
    4. $arModels = array();
    5. if (isset($_GET['model'])) {
    6.      
    7. $array_section_db = mysqli_query($db,"SELECT `category` FROM `category` WHERE `section`='".$_GET['model']."'");
    8. if (!$array_section_db)
    9. {
    10. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    11. exit(mysqli_error());
    12. }
    13. if (mysqli_num_rows($array_section_db) > 0){
    14. $array_section_db_row = mysqli_fetch_array($array_section_db);
    15. $massive = "{";
    16. while ($array_section_db_row = mysqli_fetch_array($array_section_db))
    17. {
    18. $massive .= '"'.$array_section_db_row['category'].'":"'.$array_section_db_row['category'].'",';
    19. }
    20.  
    21. $massive .= "}";
    22.  
    23. }
    24.  
    25.  
    26. }
    27.  
    28. // отдаем результат
    29. echo $massive;
    30.  
    31. ?>
    и он начал выводить следующий результат:
    Код (Text):
    1. {"AC 428":"AC 428","AC 428 Fastback":"AC 428 Fastback","AC Ace":"AC Ace","AC Ace II":"AC Ace II","AC Aceca":"AC Aceca","AC Cobra IV":"AC Cobra IV","AC Mamba":"AC Mamba","AC ME":"AC ME",}["\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0430\u0440\u043a\u0443"]
    но данный код перестает работать. помогите решить пожалуйста.
     
    #1 kuzmich, 12 фев 2023
    Последнее редактирование: 12 фев 2023
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Фиговый пример.

    Норм. вопрос сформулируй.
    --- Добавлено ---
    Выбранное значение из первого списка является ключом для создания (наполнения) второго – это элементарная логика. Ее нужно всего лишь реализовать вменяемым способом.
     
  3. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    40
    Симпатии:
    0
    @miketomlin, я имею виду как сделать код, чтобы работал массив, а данные нужно брать из базы данных
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    @kuzmich, выбирайте данные из таблицы моделей с фильтрацией по переданному ключу (даже числовой ключ можно предварительно проверить по таблице марок) и упаковывайте выборку в JSON. Как распарсить этот JSON на фронте и построить зависимый список, по ссылке в примере вроде показано.
     
  5. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    40
    Симпатии:
    0
    @miketomlin, а можете показать? Я чет не понял. Я сверху показывал свой код, но не могу разобраться
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    А, сорри. Не обратил внимания, что раздел для «попрошаек». За $10 покажу, если надумаете перенести тему в др. раздел.
     
    don.bidon нравится это.