Прежде всего, я хочу упомянуть, что я пытался и искал, как сумасшедший, найти решение для этого, но пока не повезло. Моя проблема заключается в следующем:
У меня есть база данных 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, если вам нужно выполнить проверки определенных значений …