게시글 일정 시간 지난후 자동 삭제 (2023-01-25 12:50 수정) > 그누보드5 팁자료실

그누보드5 팁자료실

게시글 일정 시간 지난후 자동 삭제 (2023-01-25 12:50 수정) 정보

게시글 일정 시간 지난후 자동 삭제 (2023-01-25 12:50 수정)

본문

 

[주] 이후 강좌수정내용의 업데이트가 안될수 있습니다.

본 강좌의 최신업데이트는 https://www.happyjung.com/lecture/2621 에서 확인가능합니다.

가급적 동일한 내용을 유지하려고 노력하지만, 우선 작업은 위 링크입니다.

 

본 팁은 테스트하지 않은 내용이므로 적용시 주의가 필요합니다.

그누보드5 / extend / daypass_del.php  를 생성하고 그속에 내용을 추가

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 특정게시판에 적용하고 싶을때  Start
$ttable = array('게시판1', '게시판2', '게시판3');
foreach($ttable as $t) {
    $tbo_table = $t;
// 특정게시판에 적용하고 싶을때  End

/*
// 전체게시판에 적용하고 싶을때  Start
$sql = "select * from `{$g5['board_table']}` order by bo_table asc ";
$result = sql_query($sql);
while($data = sql_fetch_array($result)) {
    $tbo_table = $data["bo_table"];
// 전체게시판에 적용하고 싶을때  End
*/
    
    sql_query(" delete from `{$g5['write_prefix']}{$tbo_table}` where wr_datetime < date_add(now(), interval -1 day) ");
    sql_query(" delete from `{$g5['board_new_table']}` where bn_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");
    
    // 게시판의 글 수
    $sql = " select count(*) as cnt from `{$g5['write_prefix']}{$tbo_table}` where wr_is_comment = 0 ";
    $row = sql_fetch($sql);
    $bo_count_write = $row['cnt'];
    
    // 게시판의 코멘트 수
    $sql = " select count(*) as cnt from `{$g5['write_prefix']}{$tbo_table}` where wr_is_comment = 1 ";
    $row = sql_fetch($sql);
    $bo_count_comment = $row['cnt'];    

    if (isset($_POST['proc_count'])) {
        // 원글을 얻습니다.
        //$sql = " select wr_id from `{$g5['write_prefix']}{$tbo_table}` where wr_is_comment = 0 ";
        $sql = " select a.wr_id, (count(b.wr_parent) - 1) as cnt from `{$g5['write_prefix']}{$tbo_table}` a, {$g5['write_prefix']}{$tbo_table} b where a.wr_id=b.wr_parent and a.wr_is_comment=0 group by a.wr_id ";
        $result = sql_query($sql);
        for ($i=0; $row=sql_fetch_array($result); $i++) {
            /*
            // 코멘트수를 얻습니다.
            $sql2 = " select count(*) as cnt from `{$g5['write_prefix']}{$tbo_table}` where wr_parent = '{$row['wr_id']}' and wr_is_comment = 1 ";
            $row2 = sql_fetch($sql2);
            */
            
            sql_query(" update `{$g5['write_prefix']}{$tbo_table}` set wr_comment = '{$row['cnt']}' where wr_id = '{$row['wr_id']}' ");
        }
    }
    
    // 공지사항에는 등록되어 있지만 실제 존재하지 않는 글 아이디는 삭제합니다.
    $bo_notice = "";
    $tmp_notice = "";
    if ($board['bo_notice']) {
        $tmp_array = explode(",", $board['bo_notice']);
        for ($i=0; $i<count($tmp_array); $i++) {
            $tmp_wr_id = trim($tmp_array[$i]);
            $row = sql_fetch(" select count(*) as cnt from `{$g5['write_prefix']}{$tbo_table}` where wr_id = '{$tmp_wr_id}' ");
            if ($row['cnt']) {
                $bo_notice .= $tmp_notice . $tmp_wr_id;
                $tmp_notice = ",";
            }
        }
    }
    $sql = " update `{$g5['board_table']}` set ";
    if ($bo_notice) $sql .= " bo_notice = '{$bo_notice}', ";
    $sql .= " bo_count_write = '{$bo_count_write}', ";
    $sql .= " bo_count_comment = '{$bo_count_comment}' ";
    $sql .= " where bo_table = '{$tbo_table}' ";
    sql_query($sql);
}


참고자료
https://sir.kr/qa/149890

추천
3

댓글 72개

감사합니다. 저번의 질문과 같이 링크하신 저 답변 작성자분의 팁대로 적용하였는데 글쓰기 시간의 24시간 뒤에 바로 삭제가 안되고 오늘 보니 글 써놓은지 2일 된 공지가 삭제되있더군요;;
조건은  wr_datetime < date_add(now(), interval -1 day  이렇게 변경해보세요
참고자료 : http://www.albumbang.com/board/board_view.jsp?board_name=free&no=143
$ttable = array('111', '222', '333'); 
이렇게 게시판을 생성하고

    sql_query(" delete from ".$g5['write_prefix'].$tbo_table." where wr_datetime < date_add(now(), interval -1 minute) ");

이렇게 1분후 삭제를 지시해봤습니다.

정상 삭제가 되었습니다.
1day로 설정해놨던 게시글은 방금 1minute으로 바꾸니 바로 삭제가 되더군요;
1day가 24hour 아닌가요?
그리고 혹시나 싶어서 글을 다시 쓰고 1분을 기다렸더니 역시나 또 삭제가 안됩니다.
도대체 어떤 조건으로 실행되는 건지 궁금합니다.
새로고침을 해야 extend 의 파일들이 작동합니다.
1분 경과후 새로고침 해보세요.
누군가의 접속이 있어야 시간체크를 하겠죠
당연히 새로고침을 해보고 테스트 해봤습니다.
로그인/로그아웃도 해보았고 사이트 재접속도 해보았습니다.
결론은 안되네요 ㅠㅠ 무언가에 문제가 있는 것 같습니다..
아하.. 새글 g5_new 디비에도 글이 남아있었네요. ㅋㅋ...
QA 에 문의내용이 있어서 급조해서 만들었던거라서...
아미나 사용중입니다
게시물 삭제기능은 오류없이 잘 작동하고 있읍니다
삭제시 첨부이미지가 삭제되고 에디터로 올린 게시물이 삭제안된다고 하셧는데
현재 테스트중인데 첨부로 올린 게시물도 삭제 안되고 있읍니다
혹시 별다른 설정이 필요한건가요?
로직을 다시 살펴보니, 첨부파일 삭제쿼리가 없군요. ^^;;
글 삭제하기전에 첨부파일 확인해서 그파일을 삭제하는 로직이 먼저 돌아야 할듯 싶네요
만약 추가작업을 하게 된다면 컨텐츠몰에 등록할듯 싶습니다.
작업여부는 고민해보겠습니다.
컨텐츠몰에 관리화면에서 설정할수 있는 애드온으로 올려주시면 감사하겟읍니다
가능하시면 첨부파일과 에디터로 올린 이미지도 삭제할수 있엇으면 좋겟네요
사이트에 게시물이 많아지면서 기간정해서 기간날짜가 지난 게시물은 삭제하는게 사이트 운영에 많은 도움이 될거 같읍니다
저와같은 사이트운영하시는분들 위해서 꼭 작업해주셧으면 하는 바랩입니다
에디터로 올린 이미지 삭제는 안될듯 합니다.
본문에 포함된 이미지가 그 글에서 올린 건지, 다른 글에서 올린것을 복사해서 붙인건지 확인할 수 없습니다.
이것을 가능하게 하려면, 글 작성할때 에디터로 등록된건지를 기록하는 별도 로직이 필요합니다.

첨부파일은 삭제는 가능합니다.
조만간 작업해서 등록하겠습니다.
우선 좋은 팁 남겨주셔서 감사합니다.

저거 참고해서 만들어보고 있긴 한데요.. 지난글 포인트 삭감안되게 하려면 어떻게 해야 되나요?
아~ 제말은 이해가 안갔나봐요..

정확히 얘기하면 게시글 작성 후 포인트 30점 주는 상태입니다.

게시글 삭제하면 바로 포인트 -30점 차감하게 되어있는 구조라.....

그런 얘기였어요.
sql_query(" delete from ".$g5['write_prefix'].$tbo_table." where wr_datetime < date_add(now(), interval -1 day) ");
    sql_query(" delete from ".$g5['new_win_table']." where wr_datetime < date_add(now(), interval -1 day) and bo_table = '".$tbo_table."' ");

혹시 이부분 -1 day 두개 다 바꿔야하나요?
안녕하세요 꼭 필요한거가 여기있었네요!!! 삭제는 잘 작동되는데 다만 ..
공지사항을 항상 초기화 시켜버리네요 ...

공지를 작성 -> 새로 글을쓴다 -> 기존 공지글이 일반 글로 변함
공지글 작성 -> 새로운 공지그을 쓴다 -> 기존 공지글인 일반 글로 변함..

이걸 해제한 순정에서는 문제가 없습니다 ..
어떻게 수정하면 될까요 ..
빠른 피드백 감사합니다 ^^ 공지 잘되네요
제가 아직 .. 초보라서 .. 혹시 공지는 삭제안되게 할려면 어떻게 설정해야될까요 ?
삭제되더라구요 ...
제가 처음에 말씀드렷던 공지가 해제되는 문제는 해결이됬는데
공지로 등록된 글들이 일반글과 같은 규칙으로 삭제되서 ...
공지글로 체크된것은 삭제가 안되길 원하시나 봅니다.
본 팁은 날짜 기준으로 삭제여부를 판단하는 것입니다.

공지글 여부를 먼저 판단하고 그것을 제외한 게시글만 삭제되도록 하려면
삭제 로직이 돌기전에 공지글은 게시글 작성일자를 삭제되지 않는 날짜로 변경하도록 하면 될듯 싶네요.
아 ! 그런거였군요
저는 이부분에서
// 공지사항에는 등록되어 있지만 실제 존재하지 않는 글 아이디는 삭제합니다.
공지를 안지워지개하는 방법이있는거구나 라고 착각을 한거였네요
답변 감사합니다!
혹시 new_win_table 테이블 삭제의 의미를 알수 있을까요?
해당 테이블은 새창관련 테이블인데
왠지 g5_board_new 테이블과 헷갈리신건 아닌지 궁금합니다.
제가 잘못알고 있을수도 있지만
위 쿼리에서 새글DB 까지 삭제해야 최근글에도 해당 글이 삭제되는데요

sql_query(" delete from {$g5['new_win_table']} where wr_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");

이 내용에서

{$g5['new_win_table']} 을 {$g5['board_new_table']} 로
wr_datetime 을 bn_datetime 으로 해야 될것 같습니다..
자동삭제가 아니고 자동으로 닫혔다가 나중에 관리자가 다시 풀어주게도 할 수 있는지요?
즉 일정 시간이 지나면 삭제가 아니고 자동으로 비밀글이 된다던지요...
감사합니다
자동삭제가 아니고 자동으로 닫혔다가 나중에 관리자가 다시 풀어주게도 할 수 있는지요?
>> 게시글 리스트에는 존재하게 되겠죠? 이것을 안보이게 하려면 스킨의 list 가져오는 것을 많이 수정해야 합니다.

즉 일정 시간이 지나면 삭제가 아니고 자동으로 비밀글이 된다던지요...
>> 비밀글은 목록에 노출되겠죠? 읽을 권한이 없을뿐...
해피정님~ 질문 또 있어요~ 일정시간이 지나면 게시글 자동 삭제되잖아요.

게시글, 추천 그대로 놔두고 오직 댓글만 삭제하려면 어디서 주석 달아야 할까요?
sql_query(" delete from {$g5['write_prefix']}{$tbo_table} where wr_datetime < date_add(now(), interval -1 day) ");
    sql_query(" delete from {$g5['board_new_table']} where wr_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");

를 아래와 같이 변경하면 댓글만 삭제가 될듯 싶습니다.

sql_query(" delete from {$g5['write_prefix']}{$tbo_table} where wr_datetime < date_add(now(), interval -1 day) ") and wr_is_comment = 1;
    //sql_query(" delete from {$g5['board_new_table']} where wr_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");
오~ 정말 감사합니다~

한번 테스트 해볼게요~ ^^

--------------------------------------------------------------------
테스트해보니 "syntax error, unexpected '='" 에러 나오네요... ㅠ.ㅠ

혹시 몰라서
sql_query(" delete from {$g5['write_prefix']}{$tbo_table} where wr_datetime < date_add(now(), interval -1 day) ") and wr_is_comment = 1;
에서

sql_query(" delete from {$g5['write_prefix']}{$tbo_table} where wr_datetime < date_add(now(), interval -1 day) and wr_is_comment = 1");
으로 바꿨더니 작동되네요..

문제는 리스트에 있는 코멘트 숫자는 그대로 남아있어서.. 이거 댓글 삭제됐으니 리스트에 있는 코멘트숫자도 같이 없애는 방법이 없을까요?
게시글수 리카운트가 공지글이 있을때만 처리되도록 되어있었네요.
그것을 공지글과 관계없이 리카운트 되도록 내용 수정했습니다.
정말 좋은 자료 감사드립니다.
추가적으로 삭제가 되버리면 어떤글이 삭제가 되었는지 확인할길이 없으니
휴지통처럼 특정 게시판에 옮기고 원글은 삭제할수는 없을까요?
sql_query(" delete from {$g5['board_new_table']} where wr_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");

이 부분은

wr_datetime  에서 bn_datetime 수정해야 할듯 싶어요.


지난번에

sql_query(" delete from {$g5['board_new_table']} where wr_datetime < date_add(now(), interval -1 day) and bo_table = '{$tbo_table}' ");

이거 새댓글 삭제하려면..

// 댓글 삭제
sql_query(" delete from {$g5['write_prefix']}{$tbo_table} where wr_datetime < date_add(now(), interval -1 day) ") and wr_is_comment = 1;
// 새댓글 삭제
sql_query(" delete from {$g5['board_new_table']} where bn_datetime < date_add(now(), interval -1 minute) and bo_table = '{$tbo_table}' and wr_parent <> wr_id");

쿼리문 맞는건지.. 이렇게 하면 될까요?


그리고.. 버그가 2가지 있는데..

댓글 수 안먹히는거 같고..
sql_query(" update {$g5['write_prefix']}{$tbo_table} set wr_comment = '{$row['cnt']}' where wr_id = '{$row['wr_id']}' ");

if (isset($_POST['proc_count'])) {
생략..
}

이 부분은 안먹혀서 지웠더니.. 댓글수 정상 작동되네요..



공지는 아무리 해도 다 풀립니다.. ㅠ.ㅠ
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT