Построение SQL-запроса с использованием запятой Ajax-данных, разделенных таблицей поиска - PullRequest
0 голосов
/ 06 октября 2018

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

Например, данные, которые я передаю: var dataString = '1,2,3,4' как post.Сейчас я пытаюсь получить значение в моем файле PHP и сделать запрос к моей базе данных, но значение post dataString становится пустым, как только оно попадает в файл PHP.Может кто-нибудь объяснить, где я здесь не так?

Кроме того, есть ли лучший способ для создания моего запроса SQL?

Код:

var dataString = "1,2,3,4";

      $.ajax({ /* THEN THE AJAX CALL */
        type: "POST", /* TYPE OF METHOD TO USE TO PASS THE DATA */
        url: "includes/search.php", /* PAGE WHERE WE WILL PASS THE DATA */
        data: dataString, /* THE DATA WE WILL BE PASSING */
        success: function(result){ /* GET THE TO BE RETURNED DATA */
         alert(result);
        }
      });

** PHP **

if(isset($_POST['dat'])){
    $dat = $_POST['img'];
    $types = explode(",", $dat);
    $size = sizeof($types);

    $loc = '30';

    $ini = $types[0];

    $query = "SELECT `location_images`.`image_link` FROM `location_images` INNER JOIN `image_type` ON `location_images`.`id` = `image_type`.`image_id` WHERE `location_images`.`location_id` = :loc AND (`image_type`.`dt_id` = '".$ini ."'";

    for($i=1; $i<$size; $i++){
        $query .= " OR `image_type`.`dt_id` = '".$types[$i]."'";
    }

    $query .= ")";
    echo $query; die;
}

1 Ответ

0 голосов
/ 06 октября 2018

Вам необходимо указать объект для $.ajax для параметра данных, если вы указываете строку (как вы это сделали), предполагается, что это строка запроса.Поэтому измените ваш AJAX-вызов на

  $.ajax({ /* THEN THE AJAX CALL */
    type: "POST", /* TYPE OF METHOD TO USE TO PASS THE DATA */
    url: "includes/search.php", /* PAGE WHERE WE WILL PASS THE DATA */
    data: { dat: dataString }, /* THE DATA WE WILL BE PASSING */
    success: function(result){ /* GET THE TO BE RETURNED DATA */
     alert(result);
    }
  });

Кроме того, в вашем PHP сразу после if(isset($_POST['dat'])){ вам нужно изменить

$dat = $_POST['img'];

на

$dat = $_POST['dat'];

С точки зрения генерации вашего SQL-запроса, ваш текущий метод оставляет вас открытым для внедрения SQL-кода.Я хотел бы сделать что-то вроде этого:

$query = "SELECT `location_images`.`image_link` 
          FROM `location_images` 
          INNER JOIN `image_type` ON `location_images`.`id` = `image_type`.`image_id` 
          WHERE `location_images`.`location_id` = :loc AND
               (`image_type`.`dt_id` = :type0";
for ($i = 1; $i < $size; $i++) {
    $query .= " OR image_type`.`dt_id` = :type$i";
}
$query .= ")";

Тогда вы можете связать значения типов одновременно с привязкой :loc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...