2016-09-08 2 views
0

우리는 기업 (사용자)가 자신의 제품을 업로드하고 브랜드, 색상, 재질과 같은 사양을 삽입하는 웹 사이트를 운영합니다.
방문자가 관광 제품을 찾고자 할 때 브랜드, 색상, 재료처럼 삽입하기 전에 기업 (사용자)이 선택하는 확인란을 선택할 수 있습니다. 확인란의PHP 필터링 MySQL의 곱하기 확인란

모든 결과는

지금 우리가 여기에 문제가 아약스

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을 : 삼성, LG, 애플
2.color : 레드, 블루,
녹색 3.material : 플라스틱, 금속, 유리

삼성 (브랜드)와 레드 (컬러)의 체크 박스에 방문자의 클릭 결과를 보여이어야합니다 빨간색 삼성의.

하지만 우리의 주요 문제는 방문자가 결과를 표시하기 위해 모든 확인란 (빨간색, 금속, 삼성)을 클릭해야한다는 것입니다.

그래서 방문자가 클릭 한 결과 만 표시하면 모든 확인란을 채울 필요가 없습니다.

우리의 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 OR 3 체크 박스가 선택되도록 허용하는 경우 왜 두 가지 조건 만 처리합니까? 1 개의 체크 박스와 2 개 이상의 체크 박스가 있습니다. –

+0

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

+0

브랜드, 색상, 소재 등 모든 확인란에이 조건을 어떻게 처리 할 수 ​​있습니까? @ 마르크 B –

답변

0

난 당신이

가 SQL 인젝션주의 예를 들어 동적 쿼리를 준비해야한다고 생각

참고 : 난 단지로 그것을 조정 해주세요 psuedocode (실현하려 방법에 대한 그냥 생각을) 쓰고 있어요 당신의 need

$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.