2026, 새로운 도약을 시작합니다.

포인트에 따른 회원레벨 변경에서 질문 있습니다. 채택완료

그누보드 - 포인트에 따른 회원레벨 변경 > 그누보드5 팁자료실 (sir.kr)

JLSeagull 님이 공유하신 이소스로 포인트에 따른 레벨변경 적용 했는데요.

질문 : 등업만 되고, 강등은 안되게 할려면 어디를 손봐야 할까요?

고수님들의 도움 부탁드립니다!!!

Copy


// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.

function check_member_point($mb_point, $mb_id){

    global $g5;

    $cmp_arr = array( 100, 140, 160, 180, 240, 260, 300, 310);    //2~9레벨까지 포인트 제한

                    // 2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9

    

    for($i= 0; $i  sizeof($cmp_arr); $i++){

        if($mb_point >= $cmp_arr[$i]){

            $change_level = $i+2;

        }

    }

    $sql ="update {$g5['member_table']} set mb_level =  {$change_level} where mb_id = '{$mb_id}'";

    sql_query($sql);

}

if($is_member && !$is_admin){ //회원이고, 관리자가 아닐경우에만 실행

    check_member_point($member['mb_point'], $member['mb_id']);

}

답변 5개

채택된 답변
+20 포인트

해당 function $sql 부분 확인하세요.

Copy



// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.
function check_member_point($mb_point, $mb_id){
    global $g5;
    $cmp_arr = array( 100, 140, 160, 180, 240, 260, 300, 310);    //2~9레벨까지 포인트 제한
                    // 2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9
    
    for($i= 0; $i  sizeof($cmp_arr); $i++){
        if($mb_point >= $cmp_arr[$i]){
            $change_level = $i+2;
        }
    }
    //이부분 변경
    //$sql ="update {$g5['member_table']} set mb_level =  {$change_level} where mb_id = '{$mb_id}'";
    $sql ="update {$g5['member_table']} set mb_level = {$change_level} where mb_level  {$change_level} and mb_id = '{$mb_id}'";
    sql_query($sql);
}
if($is_member && !$is_admin){ //회원이고, 관리자가 아닐경우에만 실행
    check_member_point($member['mb_point'], $member['mb_id']);
}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

감사합니다!! 이걸로 성공했습니다!!

댓글을 작성하려면 로그인이 필요합니다.

다음과 같은 방법도 있으니 참고해 보세요

Copy


function check_member_point($mb_point, $mb_id){

    global $g5;

    $cmp_arr = array(100, 140, 160, 180, 240, 260, 300, 310);    //2~9레벨까지 포인트 제한

                    // 2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9

    

    $current_level = $member['mb_level'];

    $new_level = $current_level;

    

    for ($i = $current_level - 2; $i  sizeof($cmp_arr); $i++) {

        if ($mb_point >= $cmp_arr[$i]) {

            $new_level = $i + 2;

        }

    }

    if ($new_level > $current_level) {

        $sql ="update {$g5['member_table']} set mb_level =  {$new_level} where mb_id = '{$mb_id}'";

        sql_query($sql);

    }

}

if ($is_member && !$is_admin) { //회원이고, 관리자가 아닐 경우에만 실행

    check_member_point($member['mb_point'], $member['mb_id']);

}
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

function check_member_point($mb_point, $mb_id){
    global $g5, $member; <---추가

~~

if($member['mb_level'] >= $change_level) return; <-- $sql 바로 위에 추가

$sql =~~~

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

Copy


// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.

function check_member_point($mb_point, $mb_id){

    global $g5;

    $cmp_arr = array( 100, 140, 160, 180, 240, 260, 300, 310);    //2~9레벨까지 포인트 제한

                    // 2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9

    

    for($i= 0; $i  count($cmp_arr); $i++){

        if($mb_point >= $cmp_arr[$i]){

            $change_level = $i+2;

        }

    }

    $sql ="update {$g5['member_table']} set mb_level = '{$change_level}' where mb_id = '{$mb_id}'";

    sql_query($sql);

}

if($is_member && !$is_admin){ //회원이고, 관리자가 아닐경우에만 실행

    check_member_point($member['mb_point'], $member['mb_id']);

}

위의 내용 그대로 적용 해보세요 
콤마 누락 등 몇가지 수정 하였습니다.
sizeof 대신 count 를 사용 했습니다. 차이는 그닥 없습니다.

310 이상이면 레벨 10이 되어서 관리자의 일부 기능을 할 수 있게 될 수도 있습니다.
참고하세요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

if문으로 mb_level이 change_level보다 클때만 쿼리문 실행되게 하면 될거 같아요.

Copy


if ($mb_level  $change_level) {


    $sql ="update {$g5['member_table']} set mb_level =  {$change_level} where mb_id = '{$mb_id}'";
    sql_query($sql);

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

선배님;; 여기가 아닌가 봅니다;; ㅠㅠ;
적용이 안됩니다 ㅠㅠ;;

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고