본문 바로가기
php개발자(백엔드) /php

체크박스 선택검색(숫자타입, 문자타입)

by 장김치 2016. 9. 19.

[체크박스 선택검색(숫자타입, 문자타입)]






체크박스로 선택하여 검색하는 환경일 경우 제가 겪은 시행착오와 해결 방법에 대해 정리해보았습니다.






[진행순서]


1. 체크한 값들을 어떻게 받아올 것인지


2. 받아온 값으로 SQL 검색문 만들기



먼저 체크한 값을 넘기는 경우와 받아오는 경우에 대해서 설명하겠습니다.


당연히 폼으로 전송해야겠죠?ㅎㅎ 폼으로 전송하는 방법은 생략합니다~ 

그리고 검색값이기 때문에 페이지 이동없이 자체페이지에서 받아오면 됩니다. 

저는 $_REQUEST 방식으로 값을 받아올거에요. 


현재 저는 주문상태는 value값이 숫자타입(int)로 되어있고, 결제수단은 문자타입(varchar)로 되어있어요. 이 두가지에 따라 SQL문을 다르게 적용해보았습니다.


* 숫자타입 VALUE인 경우


주문상태에서는 6개의 체크박스가 있습니다. 

각 체크박스에 대해 값을 받아올때는 배열로 받아와야합니다. 


반복문을 사용하여 값을 받아오겠습니다.


for ($i=0; $i<6; $i++)

{

    if ($_REQUEST['od_state'.$i]) // 선택한 배열값이 없다면 배열을 끝까지 만들 필요가 없기 때문에 조건문을 생성해준다.

    {

        ${'od_state'.$i} = $_REQUEST['od_state'.$i]; // od_state[$i] 에 대한 변수 선언 -> 이부분이 없다면 변수를 사용하겠다는 말이 없어서 체크값 유지에 대한 부분이 작동하지 않는다.

        $od_state[$i] = $_REQUEST['od_state'.$i]; // 각 변수에 받아온 값 넣기

    }

}



받아온 값을 출력해보면


Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )

각 배열에 값이 들어가있습니다 ~ !!



그러면 이제 이 값으로 검색하는 문을 만들어야되겠죠? 복수 검색이 가능해야하니 IN 연산자를 사용할거에요.


if (sizeof($od_state)>0) // 선택한 값이 1개라도 있는 경우

{

    $tmp_od_state = @implode(",", $od_state); 

    $SRCH_SQL .= " AND od_state in ({$tmp_od_state})";

}


implode 함수를 사용하여 배열을 문자열을 나눌거에요. 

그런데 implode 앞에 @ 표시가 있는데 이것은 php 에러메세지를 띄우지 않게 하기 위해서 넣은 거랍니다~~




* 문자타입 VALUE인 경우



받아온 값을 출력해보면


Array
(
    [0] => SC0010
    [1] => SC0030
    [2] => SC0040
    [3] => SC0060
)

이렇게 배열형태로 들어와있어요.



하지만 여기서 우리는 implode함수를 사용하지 않을거에요. 

왜냐면 IN 연산자를 사용하여 SQL문을 검색할경우 숫자는 바로 검색이되지만 문자열은 작은따옴표가 있어야해요.


IN(1,2,3...) -> 숫자검색

IN('a','b','c') -> 문자열검색


그럼 SQL문을 완성해보겠습니다. 

 

if (sizeof($od_paytype)>0) // 선택한 값이 1개라도 있는 경우

{

    for($i=0;$i<4;$i++){ 

        if($od_paytype[$i]){ // 선택한 체크박스를 한개씩 붙여서 나열한다.

            $opt .= "'".$od_paytype[$i]."',"; // 작은 따옴표와 콤마를 붙여서 문자열을 만들어준다.

        }

    }

    $opt = substr($opt, 0, -1); // 문자열 마지막 문자(콤마) 삭제

    $SRCH_SQL .= " AND od_paytype in ({$opt})";

}



'php개발자(백엔드) > php' 카테고리의 다른 글

이니시스 에스크로  (0) 2016.11.14
접속 기기별 URL 리다이렉트 시키기  (0) 2016.10.24
비밀번호 찾기 메일전송  (0) 2016.09.07
radio 박스 검색 및 유지  (0) 2016.09.07
변수와 키값 가져오기  (0) 2016.08.18