2013-08-10 4 views
1

나는 확인란을 사용하여 데이터베이스에서 결과를 필터링하고 하나의 확인란과 잘 작동하지만 여러 확인란을 선택하면 첫 번째 확인란에 대해서만 행을 반환합니다. 여러 개의 확인란을 사용하여 결과를 필터링하려면 어떻게합니까? 여기 여러 확인란을 필터링 PHP는

여기
<form id="form" method="post" action=""> 
<input type="checkbox" name="football" class="checkbox" <?=(isset($_POST['football'])?' checked':'')?>/> Football<br> 
<input type="checkbox" name="basketball" class="checkbox" <?=(isset($_POST['basketball'])?' checked':'')?>/> Basketball<br> 
<input type="checkbox" name="volleyball" class="checkbox" <?=(isset($_POST['volleyball'])?' checked':'')?>/> Volley Ball<br> 
</form> 

<script type="text/javascript"> 
    $(function(){ 
    $('.checkbox').on('change',function(){ 
     $('#form').submit(); 
     }); 
    }); 
</script> 

가 선택 쿼리 인 체크 박스입니다 .. 단지 세 번째 else if 문 반환 페이지가 '원 축구가 설정되어있는 경우 농구

if (isset($_POST["football"])){ 
    $paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%foot%' ORDER BY id desc", $options); 
} 

else if (isset($_POST["basketball"])){ 
    $paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%bask%' ORDER BY id desc", $options); 
} 

else if (isset($_POST["volleyball"])){ 
    $paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%vol%' ORDER BY id desc", $options); 
} 

else if (isset($_POST["basketball"]) && isset($_POST["football"]) && isset($_POST["volleyball"])){ 
    $paginate = new pagination($page, "SELECT * FROM balls where type LIKE '%bask%' or type LIKE '%foot%' or type LIKE '%vol%' ORDER BY id desc", $options); 
} 

else { $paginate = new pagination($page, 'SELECT * FROM balls ORDER BY id desc', $options); 

} 

답변

3

첫 번째 체크 박스 값 다른 기능을 호출하지 마십시오. 세 번째 대신 첫 번째 인수로 if (isset($_POST["basketball"]) && isset($_POST["football"]) && isset($_POST["volleyball"])){을 입력하여 문제를 해결할 수 있지만이 메서드는 세 개 중 두 개만 선택되는 경우는 처리하지 않습니다.

편집 1 : 더 적절한 방법은 다음이하는 것입니다 :

if (isset($_POST["basketball"]) { 
    $arguments[] = "type LIKE '%bask%'"; 
} 
if (isset($_POST["football"]) { 
    $arguments[] = "type LIKE '%foot%'"; 
} 
if (isset($_POST["volleyball"]) { 
    $arguments[] = "type LIKE '%vol%'"; 
} 
if(!empty($arguments)) { 
    $str = implode(' or ',$arguments); 

    $qry = "SELECT * FROM balls where " . $str . " ORDER BY id desc"; 

    $paginate = new pagination($page, $qry, $options); 
} else { 
    //Whatever happens when there's none checked. 
} 

편집 2 : 나를 여기에 무슨 일이 일어나고 있는지 설명해 보자. 먼저 각 게시물 변수를 확인하여 해당 변수가 있는지 확인합니다. 그럴 경우 type LIKE '%search term%' 인수를 사용하여 $arguments 배열에 값을 추가합니다.

그런 다음 모든 인수를 확인한 후에는이를 함께 함축하고 "또는"으로 구분합니다. 그런 다음이 인수 문자열을 쿼리에 연결하고 필요한 항목으로 단일 페이지 매김을 실행합니다. 그 이상도 이하도 아닌.

+0

옙 또한 prob입니다. 그런 선택을 다루기위한 더 나은 접근 방법은 무엇일까요? – user2666864

+0

여러 답안을 어떻게 처리 할 수 ​​있는지 예를 들어 답을 업데이트했습니다. – Jared

+0

이렇게하면'구문 분석 오류 : 예기치 않은 구문 오류 '$ paginate'' – user2666864

0

else if 블록의 시퀀스를 사용합니다. 따라서 하나만 평가됩니다.

변경하면 문제가되지 않습니다.

관련 문제