도배방지 (연속글 차단) (코드수정) 정보
도배방지 (연속글 차단) (코드수정)본문
질문게시판에 질문이 있길래 적어봅니다.
write_update.head.skin.php에 아래코드 추가 (스킨에 write_update.head.skin.php가 없으면 파일 추가)
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
//시간계산
function oekaki_paint_time($paint_time){
$ptime=sprintf("%d시간 %d분 %d초",$paint_time/3600,($paint_time/60)%60,$paint_time%60);
if($paint_time<3600)$ptime=sprintf("%d분 %d초",($paint_time/60)%60,$paint_time%60);
if($paint_time<60)$ptime=sprintf("%d초",$paint_time%60);
$array=array(' 0분',' 0초');
$ptime=str_replace($array,'',$ptime);
return $ptime;
}
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')){
//연속된 글을 작성 하였더라도 해당 시간이 지나면 글쓰기 가능. 사용하지 않으려면 값을 0으로 설정
$write_time=24; //단위 시간
//$write_time옵션 사용시 해당 옵션을 활성화 하면 도배 게시물에서 제일 마지막 게시물의 시간을 체크한다.
//0은 도배 게시물중 제일 오래된(시간상) 게시물, 1은 도배 게시물중 가장 최근 게시물.
$last_list=0;
//연속글 카운트 원하는 숫자로 수정
$write_count=5;
//회원이면 아이디 비회원이면 아이피를 가져온다
$fild=$is_member?'mb_id':'wr_ip';
//$write_count를 참고하여 마지막 작성된 글의 아이디 혹은 아이피를 가져온다
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_is_comment = '0' order by wr_id desc limit $write_count ");
$list_count=0;
//회원이면 아이디 비회원이면 아이피 할당
$name_ip=$is_member?$member['mb_id']:$_SERVER['REMOTE_ADDR'];
while($test_list=mysql_fetch_array($test)) {
if($name_ip==$test_list[$fild]){
if($write_time){
if($last_list&&!$list_count)$lists=true; else if(!$last_list)$lists=true; else $lists=false;
if($lists){
$stime=strtotime($test_list['wr_datetime']);
$write_time2=$g4['server_time']-$stime;
$write_time3=($write_time*3600)+$stime;
if($write_time2>=($write_time3-$stime)) break;
}
}
$list_count++;
}
}
//차단
if($list_count>=$write_count) {
if($write_time){
$write_time4=oekaki_paint_time($write_time3-$g4['server_time']);
$error_text='\n다른사람이 글을 작성하지 않는다면 다음글은\n'.$write_time4.' 후에 작성 가능합니다.\n('.date('Y.m.d A.g:i:s',$write_time3).')';
}
alert('글을 '.$write_count.'개이상 연속으로 작성할 수 없습니다.'.$error_text);
}
}
----------------------------
oekaki_paint_time()은 제 스킨에서 쓰던 함수인데 여러곳에서 유용하게 쓰입니다.
write_update.head.skin.php에 아래코드 추가 (스킨에 write_update.head.skin.php가 없으면 파일 추가)
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
//시간계산
function oekaki_paint_time($paint_time){
$ptime=sprintf("%d시간 %d분 %d초",$paint_time/3600,($paint_time/60)%60,$paint_time%60);
if($paint_time<3600)$ptime=sprintf("%d분 %d초",($paint_time/60)%60,$paint_time%60);
if($paint_time<60)$ptime=sprintf("%d초",$paint_time%60);
$array=array(' 0분',' 0초');
$ptime=str_replace($array,'',$ptime);
return $ptime;
}
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')){
//연속된 글을 작성 하였더라도 해당 시간이 지나면 글쓰기 가능. 사용하지 않으려면 값을 0으로 설정
$write_time=24; //단위 시간
//$write_time옵션 사용시 해당 옵션을 활성화 하면 도배 게시물에서 제일 마지막 게시물의 시간을 체크한다.
//0은 도배 게시물중 제일 오래된(시간상) 게시물, 1은 도배 게시물중 가장 최근 게시물.
$last_list=0;
//연속글 카운트 원하는 숫자로 수정
$write_count=5;
//회원이면 아이디 비회원이면 아이피를 가져온다
$fild=$is_member?'mb_id':'wr_ip';
//$write_count를 참고하여 마지막 작성된 글의 아이디 혹은 아이피를 가져온다
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_is_comment = '0' order by wr_id desc limit $write_count ");
$list_count=0;
//회원이면 아이디 비회원이면 아이피 할당
$name_ip=$is_member?$member['mb_id']:$_SERVER['REMOTE_ADDR'];
while($test_list=mysql_fetch_array($test)) {
if($name_ip==$test_list[$fild]){
if($write_time){
if($last_list&&!$list_count)$lists=true; else if(!$last_list)$lists=true; else $lists=false;
if($lists){
$stime=strtotime($test_list['wr_datetime']);
$write_time2=$g4['server_time']-$stime;
$write_time3=($write_time*3600)+$stime;
if($write_time2>=($write_time3-$stime)) break;
}
}
$list_count++;
}
}
//차단
if($list_count>=$write_count) {
if($write_time){
$write_time4=oekaki_paint_time($write_time3-$g4['server_time']);
$error_text='\n다른사람이 글을 작성하지 않는다면 다음글은\n'.$write_time4.' 후에 작성 가능합니다.\n('.date('Y.m.d A.g:i:s',$write_time3).')';
}
alert('글을 '.$write_count.'개이상 연속으로 작성할 수 없습니다.'.$error_text);
}
}
----------------------------
oekaki_paint_time()은 제 스킨에서 쓰던 함수인데 여러곳에서 유용하게 쓰입니다.
추천
5
5
댓글 13개
감사합니다
마지막 작성된 글이(같은아이디,아이피) 있어도 하루지나면 다시 글을 쓸수 있도록 할려면..?
어떻게 해야 하는지요?
마지막 작성된 글이(같은아이디,아이피) 있어도 하루지나면 다시 글을 쓸수 있도록 할려면..?
어떻게 해야 하는지요?
lbw//
옵션 추가 하였습니다. 옵션 추가하니 코드가 길어지네요
옵션 추가 하였습니다. 옵션 추가하니 코드가 길어지네요
오우 ㅎ 갑자기 방대해졌네요 ㅎㅎ 추천드립니다.
좋은 팁이네요 ㅎㅎ 근데 코멘트 도배 방지도 방법이 있을까요? ㅎㅎ 혹시 보시면 부탁 좀 드립니다 ㅎㅎ
//이 코드를
if(!$is_admin&&($w!='u')){
//이렇게 수정
if(!$is_admin&&($w!='cu')){
//이 코드를
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_is_comment = '0' order by wr_id desc limit $write_count ");
//이렇게 수정
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_parent = '$wr_id' and wr_is_comment = '1' order by wr_id desc limit $write_count ");
----------------------------
위에처럼 수정 하시고 사용하시는 스킨/write_comment_update.head.skin.php에 코드 추가 하시면 됩니다.
if(!$is_admin&&($w!='u')){
//이렇게 수정
if(!$is_admin&&($w!='cu')){
//이 코드를
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_is_comment = '0' order by wr_id desc limit $write_count ");
//이렇게 수정
$test=sql_query(" select $fild, wr_datetime from $write_table where wr_parent = '$wr_id' and wr_is_comment = '1' order by wr_id desc limit $write_count ");
----------------------------
위에처럼 수정 하시고 사용하시는 스킨/write_comment_update.head.skin.php에 코드 추가 하시면 됩니다.
특정게시판에도 적용이 가능한가요..
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')&&($bo_table=='특정게시판 테이블명')){
--------------------
위에처럼 하면 특정 게시판만 적용됩니다
if(!$is_admin&&($w!='u')&&($bo_table=='특정게시판 테이블명')){
--------------------
위에처럼 하면 특정 게시판만 적용됩니다
멋지네요 ㅎ
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')){
위부분에서 관리자외 특정 아이디를 추가가 가능한가요^^
염치없이 물어 봅니다
if(!$is_admin&&($w!='u')){
위부분에서 관리자외 특정 아이디를 추가가 가능한가요^^
염치없이 물어 봅니다
$member_array=array('아이디1','아이디2','아이디3');
$member_ck=in_array($member['mb_id'],$member_array);
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')&&!$member_ck){
-------------------------
$member_array에서 설정한 아이디는 체크하지 않습니다.
아이디는 원하는대로 추가 삭제 가능
$member_ck=in_array($member['mb_id'],$member_array);
//관리자나 글 수정시에는 체크하지 않는다
if(!$is_admin&&($w!='u')&&!$member_ck){
-------------------------
$member_array에서 설정한 아이디는 체크하지 않습니다.
아이디는 원하는대로 추가 삭제 가능
감사합니다 ㅋ
감사합니다.~
굿굿