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

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

QA

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

본문

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

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

 

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

 

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

 


// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.
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

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



// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.
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']);
}

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

 


if ($mb_level < $change_level) {

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

}

// 유저가 가진 포인트에 따라 레벨이 변경되는 소스입니다.
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이 되어서 관리자의 일부 기능을 할 수 있게 될 수도 있습니다.
참고하세요

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


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']);
}
답변을 작성하시기 전에 로그인 해주세요.
전체 123,556 | RSS
QA 내용 검색

회원로그인

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