2016-09-08 3 views
0

У нас есть сайт, на котором корпорации (пользователи) загружают свои продукты, и они вставляют спецификации, такие как бренд, цвет, материал.
Когда посетители хотят найти зрелищный продукт, они могут выбрать флажки, в которых корпорации (пользователи) должны быть вставлены как бренд, цвет, материал.php filtering mysql multiplie checkbox

Все результаты флажков шоу с Ajax

function getEmployeeFilterOptions() { 
    var opts = []; 
    $checkboxes.each(function() { 
     if (this.checked) { 
      opts.push(this.value); 
     } 
    }); 
    return opts; 
} 

function updateEmployees(opts) { 
    $.ajax({ 
     type: "POST", 
     url: "ajax/filterProducts.php", 
     data: { 
      filterOpts: opts, catIDp2:<?php echo $_GET['catIDp']; ?> 
     }, 
     success: function (records) { 
      $('#response').html(records); 
     } 
    }) 
    ; 
} 
var $checkboxes = $("input:checkbox"); 
$checkboxes.on("change", function() { 
    var opts = getEmployeeFilterOptions(); 
    updateEmployees(opts); 
}); 

Теперь у нас есть проблема здесь, Флажки работать неполный, Например, мы имеем 3 флажок для мобильных устройств:
1.brands: Samsung, LG, Apple
2.color: красный, синий, зеленый
3.material: пластик, металл, стекло

Если посетитель нажмите на флажок Samsung (марка) и красный (цвет) должен быть показан результат красных Samsung.

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

Итак, мы хотим просто показать результаты, которые посетитель нажимает на него, не все заполненные флажки.

наш PHP-код здесь:

function getFilterProducts($cat, $filter = null){ 
global $db; 
$result = ''; 
$sql = ''; 
if (count($filter) == 1) { 
    if ($filter != null) { 
     $val = implode("','", $filter); 
     $sql = "SELECT productID_C,subCatID_Product,title_Product_C,status,url_seo_product,priceStatus_C,priceProduct_C,backgroundUrlPrd_C,create_date_product,priceProduct_C,countryProductFarsi_C,brandNameFarsi_Product_C,companyID,genreProductFarsi_C,colorProductFarsi_C 
       FROM $db->products_company WHERE (countryProductFarsi_C IN ('$val') AND subCatID_Product='$cat') OR (brandNameFarsi_Product_C IN ('$val') AND subCatID_Product='$cat') OR (companyID IN ('$val') AND subCatID_Product='$cat') OR (genreProductFarsi_C IN ('$val') AND subCatID_Product='$cat') OR (colorProductFarsi_C IN ('$val') AND subCatID_Product='$cat') ORDER BY create_date_product DESC"; 
     $result = $db->query($sql); 
    } 
} elseif (count($filter) >= 2) { 
    if ($filter != null) { 
     $val = implode("','", $filter); 
     $sql = "SELECT productID_C,subCatID_Product,title_Product_C,status,url_seo_product,priceStatus_C,priceProduct_C,backgroundUrlPrd_C,create_date_product,priceProduct_C,countryProductFarsi_C,brandNameFarsi_Product_C,companyID,genreProductFarsi_C,colorProductFarsi_C 
       FROM $db->products_company WHERE subCatID_Product='$cat' AND countryProductFarsi_C IN ('$val') AND brandNameFarsi_Product_C IN ('$val') AND companyID IN ('$val') AND genreProductFarsi_C IN ('$val') AND (colorProductFarsi_C IN ('$val')) ORDER BY create_date_product DESC"; 
     $result = $db->query($sql); 
    } 
} else { 
    $sql = "SELECT productID_C,subCatID_Product,title_Product_C,status,url_seo_product,priceStatus_C,priceProduct_C,backgroundUrlPrd_C,create_date_product,priceProduct_C,countryProductFarsi_C 
      FROM $db->products_company WHERE subCatID_Product='$cat' ORDER BY create_date_product DESC"; 
    $result = $db->query($sql); 
} 
if ($result) { 
    $listFilterPrd = $result->fetch_all(MYSQLI_ASSOC); 
    return $listFilterPrd; 
} 
return null;} 

Наконец, мы хотим проверить коробки работает должным образом, как amazon.com или ebay.com

Как мы можем решить эту проблему?

This image is our product check boxes

Спасибо.

+0

Вы сравниваете строки sql, которые вы генерируете для каждой комбинации флажков? Но если вы разрешаете выбирать 1-2 или 3 флажка, почему вы обрабатываете только два условия? 1, а также «2 или более». –

+0

http://codepen.io/desandro/pen/GFbAs – Strawberry

+0

как мы можем обрабатывать это условие для каждого флажка, такого как марка, цвет, материал и многое другое ...? @Marc B –

ответ

0

Я думаю, вы должны подготовить запрос динамически , например

Берегись SQL Injection

Примечание: Я просто пишу psuedocode (только представление о том, для того чтобы достигнуть), пожалуйста, сделать это корректировки, как ваш

$sql ="select * from products where 1"; 
if($filter['color']) 
    $sql.="and color='$color'"; 
if($filter['manufracture']) 
    $sql.="and color='$manufracture'"; 
.... 
and lastly execute the query.