@theroker

Как переделать код фильтрации?

Вообщем есть такой код который фильтрует результат, мол есть например результат с тегом "Член" то по ссылке "index.php?filter=Член"
Высветится только он, как сделать чтобы можно было сделать несколько тегов то бишь пишешь "index.php?filter=Член-Пример-Пенёк-Навигация" и т. д. то высвечивается результат с этими тегами.

Сам код:
$filter = NULL;
if(isset($_GET['filter'])){
$_GET['filter'] = sanitize($_GET['filter']);
if(preg_match('#[0-9]#',$_GET['filter'])) $filter = "AND `banner` = '" . $_GET['filter'] . "'";
elseif(strlen($_GET['filter']) == 2) $filter = "AND `country` = '" . $_GET['filter'] . "'";
else {
$category_id = mysql_result(mysql_query("SELECT `category_id` FROM `categories` WHERE `name` = '{$_GET['filter']}'"),0);
$filter = "AND `category_id` = '$category_id'";
}
}
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
AlexMaxTM
@AlexMaxTM
1. Вы приводите кусок кода, хотя вопрос касается только одной строки
$category_id = mysql_result(mysql_query("SELECT `category_id` FROM `categories` WHERE `name` = '{$_GET['filter']}'"),0);

Остальная часть кода вообще не имеет отношения к вопросу к тому, же там содержатся ошибки. Например, если придет filter=2, то сработает первый if и до проверки
elseif(strlen($_GET['filter']) == 2) вообще дело не дойдет, хотя по логике как раз именно эта ветка условия должна обрабатываться при значении 2.
К тому же, если уже проверили что $_GET['filter']) == 2, зачем писать
$filter = "AND `country` = '" . $_GET['filter'] . "'";

Пишите уже сразу
$filter = "AND `country` = 2";
Хм, тоже отошел от темы вопроса :)

2. По теме вопроса.
Распарсите свой filter
Например,
$arr = explode('-', $_GET['filter']);
Вы получите массив слов
А дальше делать с этим массивом то, что вам уже нужно.
Например,
$names = explode("' , '", $arr);
mysql_query("SELECT `category_id` FROM `categories` WHERE `name` IN ('$names')")


3. Использовать mysql_query, mysql_result уже считается дурным тоном.
Это очень устаревшие подходы, и уже не работают в современных версиях PHP.
Используйте современные подходы программирования, а не исправляйте код, который был написан 15 лет назад.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы