[체크박스 선택검색(숫자타입, 문자타입)]
체크박스로 선택하여 검색하는 환경일 경우 제가 겪은 시행착오와 해결 방법에 대해 정리해보았습니다.
[진행순서]
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 |