그누보드5 여분필드를 체크박스 배열로 처리하고 출력하는 방법
페이지 정보

본문
그누보드5 운영자와 개발자가 게시판 여분 필드(wr1, wr2 등)를 다중 체크박스로 구현하고 선택된 값을 쉼표(,)로 구분해 배열 형태로 저장 및 출력하는 방법을 안내합니다.
체크박스 값을 배열로 받아 DB에 저장하는 방법
그누보드5에서 여분 필드(wr_1, wr_2)를 체크박스로 구현하고 선택된 값을 배열 형태로 전달받아 데이터베이스에 저장하려면, 게시판 스킨 폴더 내에 write_update.head.skin.php 파일을 생성하고 implode 함수를 사용하여 쉼표로 구분된 문자열로 변환해야 합니다.
1. 적용 위치 및 파일 생성
- 위치: 사용하는 게시판 스킨 폴더 (예:
skin/board/스킨이름/) - 파일명:
write_update.head.skin.php
2. 작성 코드
write_update.head.skin.php 파일에 아래와 같이 코드를 작성합니다. 글쓰기 전 단계에서 실행되며, 체크박스 배열 값($POST)을 쉼표로 연결해 여분 필드 변수(`$wr1, $wr_2`)에 담습니다.
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$wr_1 = implode(',', $_POST['check1']);
$wr_2 = implode(',', $_POST['check2']);
?>
3. 주의사항 및 다음 행동
- 데이터 충돌 방지: 기본 예제는 쉼표(
,)를 구분 기호로 사용하므로, 체크박스의value값(예:value="사과") 내부에 쉼표가 포함되면 데이터 분리 시 충돌이 발생할 수 있습니다. 값에 쉼표가 필요하다면 다른 구분 기호로 변경해야 합니다. - 결과 확인: 코드를 적용한 뒤 게시판 입력 폼에서 여러 체크박스를 선택하여 글을 등록하고, 데이터베이스의 해당 게시물 테이블(
wr_1,wr_2컬럼)에 값이 쉼표로 구분되어 정상 저장되는지 확인합니다.
입력 폼에서 체크박스 기존 선택값 유지 방법
그누보드5에서 여분 필드(wr_1, wr_2)에 저장된 쉼표(,)로 구분된 문자열 데이터를 불러와, 게시글 수정 모드나 재작성 시 체크박스의 체크 상태를 유지하려면 write.skin.php 파일 상단에서 explode 함수로 문자열을 배열로 쪼갠 뒤, 각 체크박스 태그 안에서 in_array 함수를 사용하여 일치하는 값이 있는지 확인하면 됩니다.
1. write.skin.php 파일 수정
입력 폼 파일 상단에 아래와 같이 코드를 작성하여 DB에 저장된 여분 필드 값을 배열로 변환합니다.
<?php
$check1 = explode(",", $write['wr_1']);
$check2 = explode(",", $write['wr_2']);
?>
2. 체크박스 태그에 checked 조건 추가
체크박스를 출력하는 HTML 코드에서 in_array 함수를 이용해 해당 값이 배열에 포함되어 있을 경우 checked="checked" 속성이 출력되도록 지정합니다.
과일:
<input type="checkbox" name="check1[]" value="사과"<?php echo in_array("사과", $check1)? ' checked="checked"': ''?>> 사과
<input type="checkbox" name="check1[]" value="수박"<?php echo in_array("수박", $check1)? ' checked="checked"': ''?>> 수박
<input type="checkbox" name="check1[]" value="딸기"<?php echo in_array("딸기", $check1)? ' checked="checked"': ''?>> 딸기
<input type="checkbox" name="check1[]" value="포도"<?php echo in_array("포도", $check1)? ' checked="checked"': ''?>> 포도
<input type="checkbox" name="check1[]" value="참외"<?php echo in_array("참외", $check1)? ' checked="checked"': ''?>> 참외
<br>
취미:
<input type="checkbox" name="check2[]" value="낚시"<?php echo in_array("낚시", $check2)? ' checked="checked"': ''?>> 낚시
<input type="checkbox" name="check2[]" value="등산"<?php echo in_array("등산", $check2)? ' checked="checked"': ''?>> 등산
<input type="checkbox" name="check2[]" value="사진"<?php echo in_array("사진", $check2)? ' checked="checked"': ''?>> 사진
<input type="checkbox" name="check2[]" value="여행"<?php echo in_array("여행", $check2)? ' checked="checked"': ''?>> 여행
주의사항
- 예제에서는 구분 기호로 콤마(
,)를 사용하므로, 체크박스의value값 자체에 콤마가 포함되면 데이터가 깨질 수 있습니다. 콤마가 포함되어야 한다면 다른 구분 기호로 변경해야 합니다.
게시판 보기와 목록 페이지에서 체크박스 값 출력하기
그누보드5 환경에서 여분 필드(wr_1, wr_2)에 쉼표(,)로 구분되어 저장된 체크박스 값을 view.skin.php와 list.skin.php 페이지에서 출력하는 방법입니다.
1. 뷰 페이지 (view.skin.php)
저장된 형태에 따라 글자 단위로 단순 출력하거나 체크박스 UI 형태로 복원하여 출력할 수 있습니다.
선택한 값의 글자만 출력저장된 문자열을 그대로 화면에 표시합니다.
과일: <?php echo $view['wr_1'];?><br>
취미: <?php echo $view['wr_2'];?>
체크박스 모양 그대로 출력
explode 함수를 사용하여 저장된 문자열을 배열로 변환한 뒤, in_array 함수로 체크 상태를 복원합니다.
<?php
$check1 = explode(",", $view['wr_1']);
$check2 = explode(",", $view['wr_2']);
?>
과일: <input type="checkbox" name="check1[]" value="사과"<?php echo in_array("사과", $check1)? ' checked="checked"': ''?>> 사과
<input type="checkbox" name="check1[]" value="수박"<?php echo in_array("수박", $check1)? ' checked="checked"': ''?>> 수박
<input type="checkbox" name="check1[]" value="딸기"<?php echo in_array("딸기", $check1)? ' checked="checked"': ''?>> 딸기
<input type="checkbox" name="check1[]" value="포도"<?php echo in_array("포도", $check1)? ' checked="checked"': ''?>> 포도
<input type="checkbox" name="check1[]" value="참외"<?php echo in_array("참외", $check1)? ' checked="checked"': ''?>> 참외
<br>
취미: <input type="checkbox" name="check2[]" value="낚시"<?php echo in_array("낚시", $check2)? ' checked="checked"': ''?>> 낚시
<input type="checkbox" name="check2[]" value="등산"<?php echo in_array("등산", $check2)? ' checked="checked"': ''?>> 등산
<input type="checkbox" name="check2[]" value="사진"<?php echo in_array("사진", $check2)? ' checked="checked"': ''?>> 사진
<input type="checkbox" name="check2[]" value="여행"<?php echo in_array("여행", $check2)? ' checked="checked"': ''?>> 여행
2. 목록 페이지 (list.skin.php)
체크한 값만 쉼표로 구분된 문자열 형태로 저장되어 있으므로, 목록 루프 내에서 다음과 같이 직접 출력할 수 있습니다.
<?php echo $list[$i]['wr_1']?>
<?php echo $list[$i]['wr_2']?>
체크박스 value 값에 쉼표(,)가 포함될 때 데이터 충돌 방지 방법
그누보드5에서 여분 필드를 체크박스 배열로 처리할 때 기본 구분 기호로 콤마(, )를 사용합니다. 이때 체크박스의 value 값 자체에 쉼표(예: value="사과,복숭아")가 포함되면 데이터가 깨지거나 잘못 분할되는 충돌이 발생할 수 있습니다.
확인 및 조치 위치
- 적용 파일:
write.skin.php,write_update.head.skin.php,view.skin.php - 주의 사항: 예제에서 기본 구분 기호로 사용한 콤마(, )가
value값에 포함되면 안 됩니다.
다음 행동 및 예외 처리
- value 값 조정:
value값에 쉼표가 포함되어야 한다면, 데이터 내에 절대 쓰이지 않는 다른 특수문자나 구분 기호(예:|등)로 변경해야 합니다. - 출력 부분 수정: 구분 기호를 콤마가 아닌 다른 기호로 변경했다면,
write.skin.php와view.skin.php의explode()함수를 사용할 때도 동일한 기호로 수정해야 정상적으로 체크 상태와 값이 출력됩니다.
여분 필드 체크박스 배열 처리 가이드
- 내 상황: 그누보드5 게시판에서 여분 필드(
wr_1,wr_2)를 체크박스로 구현하여 여러 값을 배열로 저장하고 관리해야 함. - 선택 기준: 데이터 저장 시
implode()로 배열을 쉼표(,) 구분 문자열로 변환하고, 출력 시explode()로 다시 배열화하여in_array()로 체크 상태를 복원하는 방식이 가장 효율적임. - 다음 행동:
write_update.head.skin.php파일을 생성하여implode저장 로직 적용.write.skin.php와view.skin.php에explode및in_array를 활용한 출력 코드 배치.- 데이터 저장 후 DB 컬럼에 쉼표로 구분된 값이 정상적으로 기록되는지 확인.
실전 FAQ
Q. 체크박스 value 값에 쉼표(,)가 포함된 경우 어떻게 처리하나요?
- 예외: 기본 예제는 쉼표를 구분자로 사용하므로,
value값에 쉼표가 포함되면 데이터가 깨집니다. - 대안:
value값에 쉼표가 반드시 필요하다면,explode와implode의 구분자를 쉼표가 아닌 다른 특수문자(예:|)로 변경하십시오. 단, 모든 스킨 파일(쓰기, 수정, 보기)에서 구분자를 동일하게 수정해야 합니다.
함께 보면 좋은 글
- 그누보드 여분필드를 이용해 특정 게시물만 최신글로 추출하는 방법
- 그누보드 여분필드 체크박스 다중 활용 시 빈 값 및 구분자 출력 문제 해결
- 그누보드 댓글 비밀글 체크박스 무조건 체크 상태로 만들기
참고자료
기타 참고자료
- 이전글그누보드5 사이트맵 sitemap.xml 생성 및 검색엔진 제출 가이드 26.11.01
- 다음글관리자 페이지 회원 관리 이메일 필수 입력 해제 방법 26.11.01
댓글목록
등록된 댓글이 없습니다.