2015-09-17 2 views
1

У меня возникли проблемы с фильтрацией моих пользователей при запуске поиска. Должно быть возможно выбрать более одного региона и пола. Пол - это флажки, а область - это множественный селектор.sql checkbox и mulit select filtering

В моем проекте все содержимое является динамичным, но это очень важно для показа здесь.

форма:

<form action="" method="get"> 

    <input type="checkbox" name="gender[]" value="1"> <!-- male --> 
    <input type="checkbox" name="gender[]" value="2"> <!-- female --> 

    <select name="region[]" multiple> 

     <option value="1">North</option> 
     <option value="2">East</option> 
     <option value="3">West</option> 
     <option value="4">South</option> 

    </select> 

    <input type="submit" name="submitSearch" value="Filter"> 
</form> 

Функция фильтра:

<?php 

    if(isset($_GET['submitSearch']){ 
     user_filter($db); 
    } 

    function user_filter($db){ 

     $gender = $_GET['gender']; 
     $region = $_GET['region']; 

     $sql = "SELECT name, region, img FROM users WHERE true $gender AND $region"; 
     $stmt = $db->prepare($sql); 
     $stmt->execute(); 
     $res = $stmt->fetchAll(); 
     return $res; 

    } 

?> 

Не уверен, что если у меня есть сделать петлю с массивами и есть проблема с тем, где правда, если ничего не установлено

надеюсь кто-нибудь может мне помочь Thanks

ответ

2

Изменить подобный код

if(isset($_GET['submitSearch']){ 
    user_filter($db); 
} 

function user_filter($db){ 

    $gender = implode(",",$_GET['gender']); //Change array to comma separated string so easy to pass in mysql using IN keyword 
    $region = implode(",",$_GET['region']); 

    $sql = "SELECT name, region, img FROM users WHERE gender IN($gender) AND region IN ($region)"; 
    $stmt = $db->prepare($sql); 
    $stmt->execute(); 
    $res = $stmt->fetchAll(); 
    return $res; 

} 

Обновленный код для условий

function user_filter($db){ 

     if(isset($_GET['gender']) && $_GET['gender'] !=''){ 
      $gender = implode(",",$_GET['gender']); //Change array to comma separated string so easy to pass in mysql using IN keyword 
     } 
     if(isset($_GET['region']) && $_GET['region'] !=''){ 
      $region = implode(",",$_GET['region']); 
     } 


     $genderSql = ""; 
     $regionSql = ""; 
     $where = ""; 

     $sql = ''; 
     $sql .="SELECT name, region, img FROM users"; 

     if(isset($_GET['gender']) && $_GET['gender'] !=''){ 
      $genderSql =" gender IN($gender)"; //Note Space at start 
     } 

     if(isset($_GET['region']) && $_GET['region'] !=''){ 
      if(isset($_GET['gender']) && $_GET['gender'] !=''){ 
       $regionSql =" AND region IN ($region)"; //Note Space at start 
      } else { 
       $regionSql =" region IN ($region)"; //Note Space at start 
      } 
     } 


     if((isset($_GET['gender']) && $_GET['gender'] !='') || (isset($_GET['region']) && $_GET['region'] !='')){ 
      $where =" Where"; 
      $sql .=$where.$genderSql.$regionSql; 
     } 


     $stmt = $db->prepare($sql); 
     $stmt->execute(); 
     $res = $stmt->fetchAll(); 
     return $res; 

    } 
+0

Спасибо, но есть проблема сейчас, если ничего не установлено, видите, я забыл сказать, что что я буду показывать всем пользователям перед поиск сделан – user3426191

+0

Сначала позвольте мне прояснить две вещи (1) Если не выбраны Пол и Религия, тогда все записи (2) Оба будут выбраны вместе или могут быть выбраны отдельно. –

+0

Извините, что неясно. да, frist Я показываю все записи (пользователи), если щелкнул только пол, тогда покажите пользователям, где пол - мужчина или женщина или оба. если регион также установлен, область отображения/регионы и пол заданы. Имеет смысл? спасибо, уже помогал мне много :) – user3426191