Intereting Posts
Неустранимая ошибка: вызов функции-члена fetchALL () для не-объекта – использование PDO в базе данных Microsoft Access Как показать php-файлы как обычный текст в Apache Передать переменные расширенному классу mysqli или умереть, нужно ли умирать? загрузить несколько файлов на php-сервер с помощью командной строки curl Есть ли предел как max_input_vars в версиях до 5.3.9? MySQL: обновление всех строк, задающих поле, до 0, но установка поля одной строки в 1 Безумное поведение когтей. продолжает отменять процессы bash Codeigniter 2.0 контроллер по умолчанию для подпапки не работает на сервере, но работает в localhost Вставка нескольких строк из php-страницы в mysql Эффективно обнаружить поврежденный файл jpeg? перенаправить пользователя после нажатия ссылки на процесс sql? Использование метода модели Laravel в запросе Eloquent Время выполнения тестов печати PHPUnit Менеджер Yii2 Translate не работает

Динамический SQL SELECT Statement с PHP на основе пользовательских параметров

Прежде всего, я хочу упомянуть, что я пытался и искал, как сумасшедший, найти решение для этого, но пока не повезло. Моя проблема заключается в следующем:

У меня есть база данных MySQL с десятками строк, и я создал сетку jQuery для отображения данных; эта страница уже работает. В соответствии с требованиями я собираю страницу, на которой люди могут выбрать пару опций из флажков и фильтровать результаты. Вот как это будет работать:

Страница 1 будет иметь 3 группы флажков (имя, местоположение, язык), и у каждого набора есть разные варианты ([Имя: Дэвид, Ник и т. Д.], [Местоположение: Нью-Йорк, Вашингтон, Мумбаи, Лондон, Майами], [Язык: Английский, испанский]. После того как пользователь выберет свои варианты, он отправит форму с чем-то вроде этого

grid.php? место = Вашингтон и место = Мумбаи и язык = Английский & имя = David

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

Я пробовал что-то вроде этого:

$location= $_GET['location']; $language= $_GET['language']; $name= $_GET['name']; if($location!=""){ $where[] = 'location='; $where_args[] = $location; } //same code for the other 2 options $where_clause = implode(' OR ', $where_args); $sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC"; 

Ни один из параметров не является обязательным, поэтому в запросе должна быть допущена возможность того, что значение может быть или не установлено, чтобы оно могло быть чем-то вроде grid.php? Language = English.

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

попробуй это:

 <?php $location= $_GET['location']; $language= $_GET['language']; $name= $_GET['name']; if($location!=""){ $where[] = " `location` = '".mysql_real_escape_string($location)."'"; } if($language!=""){ $where[] = " `language` = '".mysql_real_escape_string($language)."'"; } if($name!=""){ $where[] = " `name` = '".mysql_real_escape_string($name)."'"; } $where_clause = implode(' OR ', $where); //same code for the other 2 options $sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC"; ?> 

Вы всегда можете просто перебирать $ _GET и захватывать ключи со значениями, поэтому:

 foreach ($_GET as $key=>$val) { if ($val != "") { $where_args[] = "$key='$val'"; } } $where_clause = implode(' OR ', $where_args); 

Вы, вероятно, захотите сделать более точную проверку, чем приведенный выше пример, и вы можете добавить инструкцию select / case, если вам нужно выполнить проверки определенных значений …