Передача переменных PHP в SQL-запрос - PullRequest
0 голосов
/ 12 сентября 2018

Я хотел бы создать фильтр и передать как категорию, так и значение в запрос sql в предложении WHERE. Если я устанавливаю категорию вручную, она получает значения и фильтрует результаты. Но когда я хочу пройти категорию, это дает мне эту ошибку.

enter image description here

Вот код, который я использую:

$('#filterEvents').click(function () {
    document.location.href = 'events.php?filter=' + $('#eventFilterOption').val() + '&filterValue=' + $('#eventFilterInput').val();
});

И обработка PHP:

$category = $_GET['filter'];
$searchValue = $_GET['filterValue'];

$sql = "SELECT EV_Date, EV_KKZ, EV_CardNr, TE_Name, EV_Name, EV_SurName, EV_EventTyp FROM events1
    INNER JOIN terminal1 ON terminal1.TE_IDX = events1.EV_FK_TermIDX
    WHERE ".$category." = '" . $searchValue . "'
    ORDER BY EV_Date DESC
    LIMIT 2000";

print_r($sql);

$query = $DB->prepare($sql);
$query->execute();
$data = $query->fetchAll(PDO::FETCH_ASSOC);

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

У вас проблема с получением переменных - PHP-скрипт не получает значения - поэтому я считаю, что у вас есть ошибка в вашем Javascript.

Что еще более важно, это не безопасный способ выполнения запросов. Ваш PHP принимает переменные, переданные пользователем, и вставляет их непосредственно в SQL - без проверки. Было бы очень легко использовать эту функцию для извлечения информации или изменения вашей базы данных.

Вы должны использовать значение $category, чтобы выбрать известный столбец, а затем использовать параметры связывания, чтобы установить $searchValue.

0 голосов
/ 12 сентября 2018

Если вы немного измените функциональность, вы сможете использовать подготовленный запрос со связанными параметрами.

скажем, у вас есть фильтры по цвету и размеру в данный момент, похоже, что вы бы назвали URL как

events.php?filter=Colour&filterValue=Red
events.php?filter=Size&filterValue=Large

Вы можете перейти к фильтру [имя] = значение

events.php?filterColour=Red
events.php?filterSize=Large

Javascript будет выглядеть примерно так

$('#filterEvents').click(function () {
    document.location.href = 'events.php?filter' + $('#eventFilterOption').val() + '=' + $('#eventFilterInput').val();
});

Запрос может быть переписан следующим образом (при условии, столбцы размера и цвета)

$sql = "SELECT EV_Date, ....
WHERE 
  ( '' = :colour OR Colour = :colour ) AND
  ( '' = :size OR Size = :size ) 
ORDER BY ....

и добавлен вызов для привязки фактических параметров

$query = $DB->prepare($sql);
$query->bindParam(':colour', $_GET['filterColour'], PDO::PARAM_STR, 12);
$query->bindParam(':size', $_GET['filterSize'], PDO::PARAM_STR, 12);
$query->execute();

Это позволяет использовать подготовленные запросы и избежать риска внедрения SQL В качестве бонуса (или ошибки) он может поддерживать несколько параметров фильтра одновременно

events.php?filterSize=Large&filterColour=Red
0 голосов
/ 12 сентября 2018

Здесь у вас есть пустые значения:

$category = $_GET['filter'];
$searchValue = $_GET['filterValue'];

Вы должны отладить метод, как вы получаете их в js.Кстати, вы всегда увидите эту ошибку, когда откроете эту страницу /events.php.Потому что эти переменные будут пустыми по умолчанию.

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