Использование PHP и MySQL для сортировки событий по нескольким типам. - PullRequest
0 голосов
/ 20 сентября 2011

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

В настоящее время он работает для пользователей, у которых выбрана только одна категория ...

  $user_qstring = "SELECT types FROM tbl_users WHERE user_id='".$_SESSION['id']."'";
  $user_result = mysql_query($user_qstring);
  $user_row = mysql_fetch_array($user_result);

  $type_filter = $user_row['types'];
  if(isset($type_filter) && $type_filter !="") {
  $day_events = "SELECT COUNT(*) FROM tbl_events WHERE day='".$day_id."' AND     
  type='".$type_filter."'";
  }else{
  $day_events = "SELECT COUNT(*) FROM tbl_events WHERE day='".$day_id."'";
  }

Мне нужно изменить этот код так, чтобы, если установлен $ type_filter, он содержал несколько категорий в следующем формате.

Festivals,Sports,Education

И запрос автоматически добавляется ...

OR type='".$type_filter[2]."' OR type='".$type_filter[3]."' OR ect...

Мне удалось решить проблему, используя несколько ...

elseif(){
}

Заявления, но необходимо решение, которое можно масштабировать до неограниченного количества типов.

Я знаю, что мне нужно начать с изменения $ type_filter в список, используя explode ...

$type_filter = explode(",", $user_row['types']);

Но мне все еще не удается собрать все это вместе для короткого элегантного решения.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Сначала вам нужно будет подтвердить, что $ type_filter не содержит одинарных кавычек, в противном случае вы легко подойдете для атак с использованием SQL-инъекций.

$day_events = "SELECT COUNT(*) FROM tbl_events WHERE day='".$day_id."' AND type IN ('" . implode("','", explode(',', $type_filter)) . "')";
0 голосов
/ 20 сентября 2011

попробуйте что-то вроде следующего sql

select * from ... where type in ('one', 'two', ...) ...

и в качестве замечания - всегда избегайте получения / публикации данных, используя mysql_real_escape_string, или вы уязвимы для атак с использованием инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...