IT/PHP | CI

[CodeIgniter/PHP] checkbox 배열 데이터 가공해서 SQL IN절에 넣기

카제인나트륨. 2023. 6. 1. 21:34
728x90
반응형

웹 개발을 하다 보면 여러 체크박스를 선택하면서 데이터를 추출해 작업하는 것은 굉장히 흔합니다. 나름 제 기준에서는 간소화하다고 생각해서 제가 사용하는 것을 올려봅니다.

 

1. view

<input type="checkbox" name="subject[]" id="subject8" value="6701"> 
<label for="subject8">국어</label>
<input type="checkbox" name="subject[]" id="subject17" value="6702"> 
<label for="subject17">영어</label>
<input type="checkbox" name="subject[]" id="subject24" value="6703"> 
<label for="subject24">수학</label>
<input type="checkbox" name="subject[]" id="subject30" value="6704"> 
<label for="subject30">사회 </label>

 

2. controller

일반 php라면 함수를 추가하시면 되고 코드이그나이터라면 helper를 사용하시거나 컨트롤러에 메소드를 하나 추가해서 사용하셔도 됩니다. 문자라면 싱글쿼터(')를 붙여주고, 숫자라면 붙여주지 않습니다. 만약 PHP가 7.3미만이시라면 array_key_first함수도 따로 추가해주시면 됩니다.

##컨트롤러
$data  				= 	$this->input->get(NULL, TRUE);
print_r($data['subject']); 
//Array ( [0] => 6702 [1] => 6703 [2] => 6704 )

$data['subject']		=	setCheckBox($data['subject']);
print_r($data['subject']); 
//6702,6703,6704

## helper(공통함수)
function setCheckBox(array $array) {
	$tmp	=	"";
	foreach($array as $index => $row){
		##문자라면
		if(is_numeric($row) === false) 
			$row = "'" . $row . "'";

		if ($index === array_key_first($array))
			$tmp = $row;
		else
			$tmp .= ',' . $row;
	}
	return $tmp;
}

## PHP 7.3미만이라면 추가
if( !function_exists('array_key_first') ) {
    function array_key_first(array $array) {
        if( $array === [] ) { return NULL; }
        foreach($array as $key => $_) { return $key; }
}

 

 

3. model

SELECT * FROM TABLE WHERE subject IN ( $data['subject'] )

 

728x90
반응형