Как составить запрос?

Есть админ-панель. Требуется создать фильтрацию отображения входящих заявок.
Параметры:
- 3 типа статуса (на оценке, в работе, завершенные)
- По имени (простое текстовое поле)
- По тегам(минимум 1 тег, максимум 11)

Средствами jquery выбираю тип фильтра:
1 - по статусу
2 - по статусу и марке
3 - по статусу, марке и типу работ

Решил вопрос со статусом и именем, запросы выглядят след.образом:
spoiler
$query1 = mysqli_query($lnk, "SELECT * FROM applications WHERE status='".$_POST['status']."'");
$query2 = mysqli_query($lnk, "SELECT * FROM applications WHERE name='".$_POST['name']."' and status='".$_POST['status']."'");


А вот как быть с третьим типом - не понимаю.

Пробовал что-то такое:
spoiler
$query3 = mysqli_query($lnk, "SELECT * FROM applications WHERE name='".$_POST['name']."' and status='".$_POST['status']."' or type1='".$_POST['tag1']."' or type2='".$_POST['tag2']."' or type3='".$_POST['tag3']."' or type4='".$_POST['tag4']."' or type5='".$_POST['tag5']."' or type6='".$_POST['tag6']."' or type7='".$_POST['tag7']."' or type8='".$_POST['tag8']."' or type9='".$_POST['tag9']."' or type10='".$_POST['tag10']."' or type11='".$_POST['tag11']."'");

Если, допустим, у заявки 5 случайных фильтров, а администратор решил вывести все заявки с N-фильтром, который присутствует среди тех пяти фильтров, то такой вариант 100% не сработает.

Как правильно составить запрос в такой ситуации?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
lidacriss
@lidacriss
wtf
Добавил еще одно условие, чтобы было более "правильно"
$sql_type_array = [];
for ($i=1; $i<=11; $i++) {
  $tag_name = 'tag' . $i;
  if (isset($_POST[$tag_name]) && (int)$_POST[$tag_name] === 1) {
    $sql_type_array[] = 'type' . $i . ' != NULL';
  }
}
$query3 = mysqli_query($lnk, "SELECT * FROM applications WHERE name='".$_POST['name']."' AND status='".$_POST['status']."' " . implode(' AND ', sql_type_array);

А вообще подобные запросы лучше вообще никогда не делать, когда у вас данные из POST или GET идут сразу в SQL запрос.
В таком случае, как у вас, легко можно осуществить SQL инъекцию
Почитайте про SQL инъекции
phpprofi.ru/blogs/post/35
habrahabr.ru/post/148151/
habrahabr.ru/company/pentestit/blog/326362/
и про подготовленные SQL
php.net/manual/ru/mysqli.quickstart.prepared-state...
php.net/manual/ru/pdo.prepared-statements.php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
от 90 000 до 150 000 руб.
16 авг. 2018, в 12:52
100000 руб./за проект
16 авг. 2018, в 12:43
3000 руб./за проект
16 авг. 2018, в 12:11
100 руб./за проект