PHP и MySQL фильтрация пользователей

0

У меня есть веб-приложение, которое отображает список событий, взятых из mysql db и представленный пользователю.

Пользователь может затем фильтровать результаты по нескольким (8-10) 'типам

Мой вопрос: как мне подойти к этому? В основном мне нужно сделать вход пользователя для фильтра (в $_GET), а затем выяснить, какие типы он хочет фильтровать, и в соответствии с этим измените мой SQL-запрос.

Как мне это сделать не так сложно? Я думал о том, чтобы использовать множество операторов "if" или "case", но я не уверен, что это лучшее решение, поскольку его очень много кодирования для очень простой вещи.

Может ли кто-нибудь дать мне совет? Спасибо,

Пример DB:

EVENT_ID    EVENT_NAME     EVENT_TYPE
1           test           regular
2           test2          vip
3           test4          testtype

...

Пример $_GET:

$_GET['regular'] = 'on'

...

  • 0
    дай нам свой код (хотя бы php $ _GET и MYSQL)
  • 0
    При построении запроса MySQL (например, в виде String в сочетании с $ _GET-paramenters) помните, чтобы проверить, находятся ли значения в определенном диапазоне, или, по крайней мере, экранировать / удалить специальные символы, чтобы предотвратить внедрение SQL.
Теги:

3 ответа

0
Лучший ответ

вам следует создать массив типов, используя флажки

<input type="checkbox" name="types[]" value="regular" /> Regular

<input type="checkbox" name="types[]" value="vip" /> VIP

тогда у вас будет массив типов с $_REQUEST ['types']...

echo implode ( ",", $_ REQUEST ['types]);//например

Ну, это зависит от того, действительно ли вы храните event_types как строку (вы не должны).

Если вы измените их на int, вы можете просто сделать

$query = "select * from events";

if(isset($_REQUEST['types'])){
    $query .= "and event_types in (".implode(",",$_REQUEST['types']).")";
}

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

, конечно, вам нужно будет обеспечить это

  • 0
    Хорошо, это здорово. Я воспользуюсь этим, но это только часть решения. Как вы тогда собираете запрос MySQL? скажем, все в массиве.
  • 0
    см редактировать сообщение
Показать ещё 1 комментарий
0

Предполагается, что он допускает многократное выделение или только выбор фильтра. Если 1, вы можете использовать функцию case легко или вы можете использовать функцию onchange javascript.

  • 0
    Извините, я не упомянул об этом, множественный выбор доступен
0

Принимает GET из нескольких флажков и создает SQL-запрос. Вам нужно изменить имена столбцов и массив $getOptions. Ключ элемента $getOptions - это имя типа.

$getOptions = array(
    'regular'    => $_GET['regular'],
    'vip'        => $_GET['vip'],
    'testtype'   => $_GET['testtype']
);

$sql = "SELECT * FROM events";

$sqlOptions = array();

foreach($getOptions as $key => $value)
{
    if($value == 'on')
    {
        $sqlOptions[] = $key;
    }
}

if(!empty($sqlOptions))
{
    $sql .= " WHERE EVENT_TYPE IN ('" . implode("','", $sqlOptions) . "')";
}

// Execute $sql

Ещё вопросы

Сообщество Overcoder
Наверх
Меню