У нас есть сайт, на котором корпорации (пользователи) загружают свои продукты, и они вставляют спецификации, такие как бренд, цвет, материал.
Когда посетители хотят найти зрелищный продукт, они могут выбрать флажки, в которых корпорации (пользователи) должны быть вставлены как бренд, цвет, материал.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
Спасибо.
Вы сравниваете строки sql, которые вы генерируете для каждой комбинации флажков? Но если вы разрешаете выбирать 1-2 или 3 флажка, почему вы обрабатываете только два условия? 1, а также «2 или более». –
http://codepen.io/desandro/pen/GFbAs – Strawberry
как мы можем обрабатывать это условие для каждого флажка, такого как марка, цвет, материал и многое другое ...? @Marc B –