관리 메뉴

웹개발자의 기지개

[PHP] 체크박스에서 배열로 처리하기 (특정 문자열 체크 여부) 본문

PHP

[PHP] 체크박스에서 배열로 처리하기 (특정 문자열 체크 여부)

웹개발자 워니 2026. 6. 15. 19:06

checkbox 에서 특정문자열 체크 여부처리하는 실무에서 자주 활용하는 부분이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
 
<?
// 전시연계교육-인터뷰-홍보
$cate2_arr = explode("-", $cate2);
?>
                <input type="checkbox" id="cate2_1" name="cate2[]" value="전시" <?= in_array("전시", $cate2_arr) ? "checked" : "" ?><label for="cate2_1">전시</label> 
                <input type="checkbox" id="cate2_2" name="cate2[]" value="전시연계교육" <?= in_array("전시연계교육", $cate2_arr) ? "checked" : "" ?><label for="cate2_2">전시연계교육</label> 
                <input type="checkbox" id="cate2_3" name="cate2[]" value="인터뷰" <?= in_array("인터뷰", $cate2_arr) ? "checked" : "" ?><label for="cate2_3">인터뷰</label> 
                <input type="checkbox" id="cate2_4" name="cate2[]" value="홍보" <?= in_array("홍보", $cate2_arr) ? "checked" : "" ?><label for="cate2_4">홍보</label> 
 
 
cs

 

MariaDB 쿼리문

 

"전시-홍보"

 

SELECT *
FROM board
WHERE CONCAT('-', cate2, '-') LIKE '%-전시-%'
or CONCAT('-', cate2, '-') LIKE '%-홍보-%';

 

이번에는 좀더 고급화하여 목록페이지의 검색 체크 박스를 구현해보자.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?
$scate2_1  = ($_GET[scate2_1])? $_GET[scate2_1] : $_POST[scate2_1]; // 전체
$scate2_2  = ($_GET[scate2_2])? $_GET[scate2_2] : $_POST[scate2_2]; // 전시
$scate2_3  = ($_GET[scate2_3])? $_GET[scate2_3] : $_POST[scate2_3]; // 전시연계교육
$scate2_4  = ($_GET[scate2_4])? $_GET[scate2_4] : $_POST[scate2_4]; // 인터뷰
$scate2_5  = ($_GET[scate2_5])? $_GET[scate2_5] : $_POST[scate2_5]; // 홍보
 
$where = "where 1=1 ";
 
if ($scate2_1=="y") {
    $where .= " and ( CONCAT('-', cate2, '-') LIKE '%-전시-%' or CONCAT('-', cate2, '-') LIKE '%-전시연계교육-%' or CONCAT('-', cate2, '-') LIKE '%-인터뷰-%' or CONCAT('-', cate2, '-') LIKE '%-홍보-%'  ) ";
    
    $scate2_2 = "y";
    $scate2_3 = "y";
    $scate2_4 = "y";
    $scate2_5 = "y";
    
} else {
    $cate2Arr = array();
    
    if ($scate2_2=="y") {
        $cate2Arr[] = "CONCAT('-', cate2, '-') LIKE '%-전시-%'";
    }
    if ($scate2_3=="y") {
        $cate2Arr[] = "CONCAT('-', cate2, '-') LIKE '%-전시연계교육-%'";
    }
    if ($scate2_4=="y") {
        $cate2Arr[] = "CONCAT('-', cate2, '-') LIKE '%-인터뷰-%'";
    }
    if ($scate2_5=="y") {
        $cate2Arr[] = "CONCAT('-', cate2, '-') LIKE '%-홍보-%'";
    }    
    
    if (sizeof($cate2Arr) > 0) {        
        $where .= " and ( ".implode(" or ",$cate2Arr)." )";
    }
}
 
?>
 
<input type="checkbox" id="scate2_1" name="scate2_1" value="y" onclick="cate2Chg('1')" <?if ($scate2_1=="y") echo "checked";?><label for="scate2_1">전체</label>
<input type="checkbox" id="scate2_2" name="scate2_2" value="y" onclick="cate2Chg('2')" <?if ($scate2_2=="y") echo "checked";?><label for="scate2_2">전시</label>        
<input type="checkbox" id="scate2_3" name="scate2_3" value="y" onclick="cate2Chg('3')" <?if ($scate2_3=="y") echo "checked";?><label for="scate2_3">전시연계교육</label>        
<input type="checkbox" id="scate2_4" name="scate2_4" value="y" onclick="cate2Chg('4')" <?if ($scate2_4=="y") echo "checked";?><label for="scate2_4">인터뷰</label>        
<input type="checkbox" id="scate2_5" name="scate2_5" value="y" onclick="cate2Chg('5')" <?if ($scate2_5=="y") echo "checked";?><label for="scate2_5">홍보</label>        
 
<script>
function cate2Chg(num) {
    var gap = "";
    var chk = document.getElementById("scate2_" + num).checked;
    if (chk==true) {
        gap = "y";
    } else {
        gap = "";    
    }
 
    
    if (num=="1")
    {
        if (gap=="y")
        {
            location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>&scate2_1=y&scate2_2=y&&scate2_3=y&scate2_4=y&&scate2_5=y";                    
        } else {
            location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>";        
        }
    } else if (num=="2") {
        location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>&scate2_2="+ gap +"&scate2_3=<?=$scate2_3?>&scate2_4=<?=$scate2_4?>&scate2_5=<?=$scate2_5?>";        
    } else if (num=="3") {
        location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>&scate2_2=<?=$scate2_2?>&scate2_3="+ gap +"&scate2_4=<?=$scate2_4?>&scate2_5=<?=$scate2_5?>";            
    } else if (num=="4") {
        location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>&scate2_2=<?=$scate2_2?>&scate2_3=<?=$scate2_3?>&scate2_4="+ gap +"&scate2_5=<?=$scate2_5?>";            
    } else if (num=="5") {
        location.href="?syear=<?=$syear?>&scate1=<?=$scate1?>&scate2_2=<?=$scate2_2?>&scate2_3=<?=$scate2_3?>&scate2_4=<?=$scate2_4?>&scate2_5="+ gap;            
    }
 
}
</script>
cs

 

 

where 1=1 and ( CONCAT('-', cate2, '-') LIKE '%-전시-%' or CONCAT('-', cate2, '-') LIKE '%-인터뷰-%' or CONCAT('-', cate2, '-') LIKE '%-홍보-%' )

 

형태로, or 조건으로 cate2Arr 배열처리하여  implode 함수를 적용하였다.

Comments