특정 게시판에 글을 쓰지 않으면 등급이 내려가는 sql문이 잘 안되네요..ㅠㅠ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

특정 게시판에 글을 쓰지 않으면 등급이 내려가는 sql문이 잘 안되네요..ㅠㅠ 정보

특정 게시판에 글을 쓰지 않으면 등급이 내려가는 sql문이 잘 안되네요..ㅠㅠ

본문

어떤 분이 답변을 달아 주셨는데..
안되더라구요.. list.skin.php에다가 담았는데두요;;
흠.. 아무튼.. 질문 사항은 이렇습니다..

특정 게시판의 스킨의 list.skin.php에다가..
일정 기간동안의(예를들어 60일이라면..) 글을 한번도 안썼으면..

등급을 1등급 낮추는 프로그램인데요...

아래 있는 소스가 안되더라구요;;;
(일부러 1일 맞춰서해봤는데 안되네요ㅠ)

수정해주실 분 찾습니다~~



//기간설정
$limit_date = "60";
//다운시킬 레벨 설정
$after_level = "1";
//해당게시판에 현재 접속한 멤버 아이디 값으로 게시글 등록일을 꺼내옵니다. limit이 1이니 마지막 한개죠.. desc = 내림차순
$sql  = " select wr_datetime from $write_table where mb_id = '$member[mb_id]' order by wr_datetime desc limit 0, 1 ";
$result = sql_query($sql);

while ($row = sql_fetch_array($result)){
//$last_write_date라는 변수에 꺼내온 날짜를 담아둡니다.
$last_write_date = $row[wr_datetime];
}
//$last_write_day변수에 날짜데이터를 변환해서 넣어둡니다.
$last_write_day = date("Y-m-d",strtotime($last_write_date));
//$last_write_day변수에 들어있는 날짜데이터를 - 를 기준으로 쪼개서 배열변수로 변환합니다.
$last_write_day = explode("-",$last_write_day);
//마지막 글 쓴 일로부터 $limit_days만큼 지난 날짜를 얻어 $limit_day 함수에 넣어둡니다.
$limit_day = date("Y-m-d",mktime(0,0,0,$last_write_day[1],$last_write_day[2]+$limit_date,$last_write_day[0]));
//$today 변수에 오늘 날짜를 변환해서 넣어둡니다.
$today = date("Y-m-d",time());

//오늘 날짜가 limit_day보다 클 때
if($limit_day < $today){
//멤버테이블에서 해당멤버의 레벨을 $after_level로 수정합니다.
//현재 레벨에서 몇단계 다운시킬경우 현재 레벨을 먼저 가져와서 계산공식을 거쳐서 다시 업데이트 해야함..
$update_sql = " update g4_member set mb_level = '$after_level' where mb_id = '$member[mb_id]' ";
sql_query($update_sql);
//현재 레벨을 가져옵니다.
$sql1 = " select mb_level from g4_member where mb_id = '$member[mb_id]' ";
$result1 = sql_query($sql1);
while($row1 = sql_fetch_array($result1)){
//$update_level변수에 변경된 레벨을 넣습니다.
$update_level = $row1[mb_level];
}
//경고창..
alert("{$limit_date}일동안 게시글을 남기지 않아 레벨 {$update_level}로 강등되셨습니다.");
}
  • 복사

댓글 전체

if ($member[mb_level]>1 && $member[mb_level]<10) {  // 레벨1 이면 더 이상 레벨이 다운될수 없으므로 레벨1 이상만 적용 및 레벨10 이하만 적용

  $limit_date = "60"; //기간설정 60일
  $after_level = "1"; // 다운시킬 레벨
  $row = sql_fetch(" select wr_datetime from $write_table where mb_id = '$member[mb_id]' order by wr_datetime desc ");

  $d_y=substr($row[wr_datetime], 0, 4);
  $d_m=substr($row[wr_datetime], 5, 2);
  $d_d=substr($row[wr_datetime], 8, 2);

  $limit_day = mktime(0,0,0,$d_m,$d_d,$d_y);
  $last_day=$limit_day+($limit_date*86400);

  if ($last_day < $g4[server_time]) {
    $to_level=$member[mb_level]-$after_level;
    sql_query(" update g4_member set mb_level = '$to_level' where mb_id = '$member[mb_id]' ");
    alert("{$limit_date}일동안 게시글을 남기지 않아 레벨 {$to_level}로 강등되셨습니다.");
  }
}


------------------------
위 소스로 적용하면 게시판에 접근할때마다 레벨이 다운됩니다. 회원 여분필드를 다 사용하지 않으신다면 아래와 같이 사용하는 것도 좋을듯합니다.
아래는 레벨이 강등된 후 $to_date에 설정한 일이 지나기전엔 다시 강등되지 않습니다.
------------------------



if ($member[mb_level]>1 && $member[mb_level]<10) {  // 레벨1 이면 더 이상 레벨이 다운될수 없으므로 레벨1 이상만 적용 및 레벨10 이하만 적용

  $to_date="2"; // 2일 뒤에 다시 레벨 강등하기
  $to_day=$g4[server_time]-($to_date*86400);

  if (!$member[mb_9] || $member[mb_9]>$to_day) {  // 레벨강등이 한번도 없었거나, 이미 레벨이 강등된 후 $to_date 일수가 지났다면 강등 적용

    $limit_date = "60"; //기간설정  60일
    $after_level = "1"; // 다운시킬 레벨
    $row = sql_fetch(" select wr_datetime from $write_table where mb_id = '$member[mb_id]' order by wr_datetime desc ");

    $d_y=substr($row[wr_datetime], 0, 4);
    $d_m=substr($row[wr_datetime], 5, 2);
    $d_d=substr($row[wr_datetime], 8, 2);

    $limit_day = mktime(0,0,0,$d_m,$d_d,$d_y);
    $last_day=$limit_day+($limit_date*86400);

    if ($last_day < $g4[server_time]) {
      $to_level=$member[mb_level]-$after_level;
      sql_query(" update g4_member set mb_level = '$to_level', mb_9='$g4[server_time]' where mb_id = '$member[mb_id]' ");
      alert("{$limit_date}일동안 게시글을 남기지 않아 레벨 {$to_level}로 강등되셨습니다.");
    }
  }
}


------------------------
여분필드중 mb_9 를 사용했으므로 mb_9 여분필드가 사용중이시라면 mb_1 ~ mb_10중 사용하지 않은 여분필드로 교체하세요.
© SIRSOFT
현재 페이지 제일 처음으로