그누보드 댓글 삭제 시 데이터 완전 삭제 대신 '삭제된 댓글입니다' 흔적 남기는 방법
페이지 정보

본문
그누보드 운영자 및 개발자가 일반 사용자의 댓글 삭제 시 DB에서 완전히 지우는 대신 안내 문구와 삭제 일시를 기록하고, 관리자는 즉시 삭제를 유지하도록 기능을 수정하는 방법을 안내합니다.
그누보드 댓글 삭제 시 흔적 남기기 설정 방법
그누보드에서 일반 사용자가 댓글을 삭제할 때 데이터베이스에서 완전히 지우지 않고 "삭제된 댓글입니다" 문구와 일시를 남기려면 bbs/delete_comment.php 파일을 수정해야 한다. 관리자가 삭제할 때와 일반 사용자가 삭제할 때의 로직을 구분하여 처리할 수 있다.
수정 파일 및 위치
- 수정 파일:
bbs/delete_comment.php
※ 수정 전 반드시 bbs/delete_comment.php 파일을 백업하십시오.
코드 수정 방법
bbs/delete_comment.php 파일에서 관리자 여부를 확인하는 조건문(if ($is_admin))을 기준으로 코드를 분기한다. 관리자가 삭제할 경우에는 기존과 같이 완전 삭제 처리를 유지하고, 관리자가 아닐 경우에는 내용만 수정하는 쿼리로 변경한다.
if ($is_admin) {
// 코멘트 삭제
sql_query(" delete from {$write_table} where wr_id = '{$comment_id}' ");
// 코멘트가 삭제되므로 해당 게시물에 대한 최근 시간을 다시 얻는다.
$sql = " select max(wr_datetime) as wr_last from {$write_table} where wr_parent = '{$write['wr_parent']}' ";
$row = sql_fetch($sql);
// 원글의 코멘트 숫자를 감소
sql_query(" update {$write_table} set wr_comment = wr_comment - 1, wr_last = '{$row['wr_last']}' where wr_id = '{$write['wr_parent']}' ");
// 코멘트 숫자 감소
sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment - 1 where bo_table = '{$bo_table}' ");
// 새글 삭제
sql_query(" delete from {$g5['board_new_table']} where bo_table = '{$bo_table}' and wr_id = '{$comment_id}' ");
} else {
// 관리자가 아니면 코멘트 내용만 수정
sql_query(" update {$write_table} set wr_content = '삭제된 댓글입니다. (삭제일시: ".G5_TIME_YMDHIS.")' where wr_id = '{$comment_id}' ");
}
주의 사항
- 댓글 내용 내에 HTML 태그나 글자 색상 지정을 적용하더라도, 원본 출력 기준에 따라 댓글 출력부에서 태그가 정상 작동하지 않을 수 있으니 적용 시 출력 제한 문제를 고려해야 한다.
관리자와 일반 사용자 삭제 처리 분기 방법
그누보드에서 댓글 삭제 시 관리자와 일반 사용자의 처리를 다르게 하려면 bbs/delete_comment.php 파일의 조건문을 활용합니다. 관리자는 게시글을 관리해야 하므로 기존과 같이 즉시 완전 삭제 처리를 유지하고, 일반 사용자가 삭제할 때만 코멘트 내용만 수정하는 쿼리가 실행되도록 분기합니다.
수정 위치 및 조건문 적용
bbs/delete_comment.php 파일에서 $is_admin 변수를 기준으로 다음과 같이 조건문을 구분합니다.
- 관리자 권한 (
$is_admin): 기존과 동일하게 데이터베이스에서 댓글을 완전히 삭제하고, 원글의 코멘트 수 및 새글 테이블을 갱신하는 로직을 수행합니다. - 일반 사용자 (
else): 코멘트 데이터를 완전히 삭제하는 대신wr_content필드 값을 '삭제된 댓글입니다. (삭제일시:...)' 문구로 업데이트하는 SQL 쿼리를 실행합니다.
if ($is_admin) {
// 코멘트 삭제
sql_query(" delete from {$write_table} where wr_id = '{$comment_id}' ");
// (중략: 원글 코멘트 수, 새글 테이블 갱신 등 기존 관리자 삭제 로직 유지)
} else {
// 관리자가 아니면 코멘트 내용만 수정
sql_query(" update {$write_table} set wr_content = '삭제된 댓글입니다. (삭제일시: ".G5_TIME_YMDHIS.")' where wr_id = '{$comment_id}' ");
}
주의 사항
- 댓글 내용 내에 HTML 태그나 글자 색상 지정을 적용하더라도, 원본 출력 방식에 따라 댓글 영역에서 태그가 정상 작동하지 않을 수 있으므로 적용 범위와 출력을 미리 확인해야 합니다.
삭제된 댓글 내용에 HTML 태그나 글자 색상 적용 시 주의사항
그누보드에서 일반 사용자가 댓글을 삭제할 때 완전 삭제 대신 특정 문구와 일시를 남기도록 bbs/delete_comment.php 파일을 수정한 후, 삭제된 댓글 문구에 HTML 태그(예: 글자 색상을 지정하는 <font color="#0000ff"> 등)를 적용하려 할 수 있습니다.
그러나 댓글 내용 내에 HTML 태그나 색상 지정을 하더라도, 원본 출력 기준의 댓글 영역에서는 해당 태그가 정상적으로 작동하지 않고 그대로 노출되거나 제한될 수 있습니다. 따라서 삭제된 댓글과 일반 댓글을 시각적으로 확실히 구별하려면 단순히 데이터 쿼리 내에 HTML 태그를 삽입하는 방식 외에 출력부의 처리 방식을 함께 검토해야 합니다.
그누보드 댓글 삭제 흔적 남기기 설정
- 내 상황: 그누보드 5 환경에서 일반 사용자가 댓글을 삭제할 때 완전 삭제 대신 "삭제된 댓글입니다" 문구와 일시를 남기려 함
- 선택 기준: 관리자 권한 여부에 따라 로직 분기 (
bbs/delete_comment.php파일 수정) - 다음 행동: 관리자 삭제 시 기존 완전 삭제 유지, 일반 사용자 삭제 시 내용 변경(
update) 쿼리 적용
실전 FAQ
Q. 관리자가 삭제할 때와 일반 사용자가 삭제할 때의 처리를 어떻게 다르게 하나요?
- 실행 및 예외:
bbs/delete_comment.php파일에서$is_admin변수를 확인하는 조건문을 활용합니다. 관리자($is_admin참)인 경우 기존과 동일하게 데이터베이스에서 완전히 삭제하고 원글의 코멘트 수 및 새글 테이블을 갱신합니다. 관리자가 아닌 일반 사용자의 경우else블록에서delete쿼리 대신wr_content필드 값을 '삭제된 댓글입니다. (삭제일시:...)'로 변경하는update쿼리를 실행하도록 처리합니다.
Q. 삭제된 댓글 내용에 HTML 태그나 글자 색상을 적용할 수 있나요?
- 막히는 지점: 댓글 내용에 HTML 태그를 포함하여 쿼리를 작성해도, 그누보드 댓글 출력부의 보안 및 렌더링 정책에 따라 태그가 작동하지 않고 문자로 노출될 수 있습니다.
- 대안: 데이터 쿼리 삽입 방식만으로는 시각적 구별이 어려울 수 있으므로, 댓글 출력 스킨(
view_comment.skin.php)에서 삭제 여부 필드를 확인하여 별도의 CSS 클래스를 적용하는 방식을 검토해야 합니다.
함께 보면 좋은 글
- 그누보드 회원 데이터 완전 삭제(Hard Delete)를 위한 로직 수정 방법
- 그누보드 장기 미접속 휴면 회원 일괄 삭제 및 완전 정리 방법
- 그누보드 관리자 페이지 회원 완전 삭제 기능 추가 및 목록 출력 개수 조절 가이드
참고자료
기타 참고자료
- 이전글그누보드 댓글 답변글 작성 단계 depth 제한 방법 26.10.27
- 다음글그누보드 관리자 로그인 후 글쓴이 임의 입력 및 등록 방법 26.10.27
댓글목록
등록된 댓글이 없습니다.