Формирование правильного J SON из базы данных

Рейтинг: 0Ответов: 0Опубликовано: 01.06.2023

Все привет ,такой вопрос мне нужно сформировать список моделей авто. Веду в курс дела.

  1. Есть главная таблица auct_lots_xml_jp В ней строки company_en - Марка авто model_name_en - модель есть, еще но они не принципиальны сейчас. Код php который выводит список и даже сортирует его по моделям работает. Вот пример как это выглядит в адресной строке. company_en=HONDA&model_name_en=CIVIC&model_year_en=2008.

Вот пример кода сортировки. Он очень простецкий, но я новичок.

 <?php
       if (!isset($model_name_en)) {
   // Если model_name_en не задано, отобразить все автомобили для выбранной company_en и model_year_en (если задано).
   if (isset($model_year_en)) {
      $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_year_en = '$model_year_en' ORDER BY id DESC LIMIT 21";
   } else {
      $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' ORDER BY id DESC LIMIT 21";
   }
} else if (isset($model_year_en)) {
   // Если задано model_name_en и model_year_en, отображаются автомобили для выбранной company_en, model_name_en и model_year_en
   $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' AND model_year_en = '$model_year_en' ORDER BY id DESC LIMIT 21";
} else if (isset($model_name_en)) {
   // Если задано model_name_en и не задан model_year_en, отображаются автомобили для выбранной company_en и model_year_en
   $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' ORDER BY id DESC LIMIT 21";
} else {
   // Если не заданы ни model_name_en, ни model_year_en, отобразите запрос по умолчанию
   $query = "SELECT * FROM `auct_lots_xml_jp` ORDER BY id DESC LIMIT 21";
}

Дальше идет Java script с формированием списка. Марок , а потом моделей.

function loadModels() {
  var elSelectBrand = document.getElementById("selectBrand");
  var elSelectModel = document.getElementById("selectModel");

  // Обработчик события изменения выбранного бренда (selectBrand)
  elSelectBrand.addEventListener('change', function() {
    // Получение выбранного бренда
    var selectedBrands = [];
    for (var i = 0; i < elSelectBrand.options.length; i++) {
      if (elSelectBrand.options[i].selected) {
        selectedBrands.push(elSelectBrand.options[i].value);
      }
    }

    // Очищаем список моделей перед загрузкой новых
    elSelectModel.innerHTML = "";

    // Загружаем модели для выбранных брендов
    if (selectedBrands.length > 0) {
      // Формируем URL для запроса моделей
      var url = "load_models.php?makes=" + encodeURIComponent(selectedBrands.join(","));

      // Выполняем AJAX-запрос для получения моделей
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
          if (xhr.status === 200) {
            // Обработка успешного ответа
            var models = JSON.parse(xhr.responseText);

            // Создание элементов <option> для каждой модели
            for (var j = 0; j < models.length; j++) {
              var option = document.createElement("option");
              option.value = models[j];
              option.text = models[j];
              elSelectModel.appendChild(option);
            }
            
            // Удаление атрибута disabled
            elSelectModel.removeAttribute("disabled");
          } else {
            // Обработка ошибки
            console.error("Ошибка запроса моделей: " + xhr.status);
          }
        }
      };
      xhr.open("GET", url, true);
      xhr.send();
    }
  });
}

В ошибке мне пишет, что не может сформировать правильный Json запрос. Вот код файла который я подключаю для обработки моделей.

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('../admin-aj/conn/connectvars.php');
 

// Получаем выбранный производитель
$selectedCompanies = explode(",", $_GET['makes']);

$name = $_GET['id'];
   if (isset($_GET['company_en'])) {
       $company_en = $_GET['company_en'];
       $model_name_en = $_GET['model_name_en'];
       $model_year_en = $_GET['model_year_en'];
       $mileage_en = $_GET['mileage_en'];
   }

// Формируем запрос для получения уникальных моделей для выбранных производителей
if (!isset($model_name_en)) {
    // Если model_name_en не задано, отобразить все автомобили для выбранной company_en и model_year_en (если задано).
    if (isset($model_year_en)) {
        $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_year_en = '$model_year_en' ORDER BY id DESC ";
    } else {
        $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' ORDER BY id DESC ";
    }
} else if (isset($model_year_en)) {
    // Если задано model_name_en и model_year_en, отображаются автомобили для выбранной company_en, model_name_en и model_year_en
    $query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' AND model_year_en = '$model_year_en' ORDER BY id DESC ";
}

// Выполняем запрос к базе данных
$result = mysqli_query($connection, $query);

// Формируем массив моделей
$models = array();
while ($info = mysqli_fetch_array($result)) {
    $models[] = $info['model_name_en'];
}

// Возвращаем список моделей в формате JSON
echo json_encode($models);
?>

Текс ошибки

Uncaught SyntaxError: Unexpected token '<', "<br />
<b>"... is not valid JSON
    at JSON.parse (<anonymous>)
    at xhr.onreadystatechange (by_maker_new.php:715:31)

Вопрос что не так с Возвращаем списка моделей в формате JSON?. Спасибо.

Ответы

Ответов пока нет.