BOARD

강좌·기초

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

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 1회 작성일 26-11-01 16:07

본문

그누보드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 값에 포함되면 안 됩니다.

다음 행동 및 예외 처리

  1. value 값 조정: value 값에 쉼표가 포함되어야 한다면, 데이터 내에 절대 쓰이지 않는 다른 특수문자나 구분 기호(예: | 등)로 변경해야 합니다.
  2. 출력 부분 수정: 구분 기호를 콤마가 아닌 다른 기호로 변경했다면, write.skin.php와 view.skin.php의 explode() 함수를 사용할 때도 동일한 기호로 수정해야 정상적으로 체크 상태와 값이 출력됩니다.

여분 필드 체크박스 배열 처리 가이드

  • 내 상황: 그누보드5 게시판에서 여분 필드(wr_1, wr_2)를 체크박스로 구현하여 여러 값을 배열로 저장하고 관리해야 함.
  • 선택 기준: 데이터 저장 시 implode()로 배열을 쉼표(,) 구분 문자열로 변환하고, 출력 시 explode()로 다시 배열화하여 in_array()로 체크 상태를 복원하는 방식이 가장 효율적임.
  • 다음 행동:
    1. write_update.head.skin.php 파일을 생성하여 implode 저장 로직 적용.
    2. write.skin.php와 view.skin.php에 explode 및 in_array를 활용한 출력 코드 배치.
    3. 데이터 저장 후 DB 컬럼에 쉼표로 구분된 값이 정상적으로 기록되는지 확인.

실전 FAQ

Q. 체크박스 value 값에 쉼표(,)가 포함된 경우 어떻게 처리하나요?

  • 예외: 기본 예제는 쉼표를 구분자로 사용하므로, value 값에 쉼표가 포함되면 데이터가 깨집니다.
  • 대안: value 값에 쉼표가 반드시 필요하다면, explode와 implode의 구분자를 쉼표가 아닌 다른 특수문자(예: |)로 변경하십시오. 단, 모든 스킨 파일(쓰기, 수정, 보기)에서 구분자를 동일하게 수정해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.