로그인을할때 현제까지 누적금액을 계산해서 등급을 자동으로 높히려고하는대요..

Copy
if($mb_level['mb_level'] < 10){

            $sql = "select sum(a.od_cart_price) od_cart_price from {$g5['g5_shop_order_table']} a inner join {$g5['member_table']} b on a.mb_id = b.mb_id where a.od_status = '완료' and a.mb_id = '{$member['mb_id']}'"; // 주문상태 취소를 제외,

        $row = sql_fetch($sql);

        $cart_price = $row['od_cart_price'];

        if($cart_price >= 300000){

            $level_up = 3;

        }

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

        sql_query($sql);

    }

이상하게 첫 if문만 통과하고 중간에있는 if문은 그냥 넘어가버립니다 누적금액을 변수로 받아봐도 안돼는데.. 이거 왜이러는건가요 ..?

|

답변 3개 / 댓글 2개

if($cart_price >= 300000){
    $level_up = 3;
}

$sql= " update ... set mb_level = '$level_up' ";

300000 미만이면 $level_up 자체가 없음
 PHP에서는 NULL > 빈값 > 0 으로 처리될 수 있음
회원 레벨이 0으로 떨어질 위험
------------------------------------------------------------------------------------------
if ($member['mb_level'] < 10) {

    $sql = "
        SELECT SUM(a.od_cart_price) AS od_cart_price
        FROM {$g5['g5_shop_order_table']} a
        WHERE a.od_status = '완료'
          AND a.mb_id = '{$member['mb_id']}'
    ";
    $row = sql_fetch($sql);

    $cart_price = (int)$row['od_cart_price'];

    // 기본값은 현재 레벨
    $level_up = $member['mb_level'];

    // 조건 만족 시 최소 레벨 3 보장
    if ($cart_price >= 300000 && $member['mb_level'] < 3) {
        $level_up = 3;
    }

    // 레벨 변경이 있을 때만 UPDATE
    if ($level_up != $member['mb_level']) {
        sql_query("
            UPDATE {$g5['member_table']}
            SET mb_level = '{$level_up}'
            WHERE mb_id = '{$member['mb_id']}'
        ");
    }
}


[프리랜서 광고 한줄 ^^]
해외서버관리/API개발/프로그램/APP/모바일/랜딩페이지/스포츠커뮤니티 (20년개발자노하우/사후관리) 010-5005-6102

$sql = "select sum(a.od_cart_price) as od_cart_price_sum from {$g5['g5_shop_order_table']} a inner join {$g5['member_table']} b on a.mb_id = b.mb_id where a.od_status = '완료' and a.mb_id = '{$member['mb_id']}'"; // 주문상태 취소를 제외,

$row = sql_fetch($sql);

$cart_price = $row['od_cart_price_sum'];

위의 부분도 수정하세요.

우선 금액이 null 이면 오류가 납니다.

$cart_price = (int)$row['od_cart_price'];
이렇게 하셔서 금액이 없다면 0 으로 되게 하시구요

if($cart_price >= 300000){
$sql= " update {$g5['member_table']} set mb_level = '3' where mb_id = '$mb_id' "; sql_query($sql);
}

이렇게 하세요..
그리고 $level_up 변수 가 정의되어있지 않다면 또 다른 오류가 날거에요.

if($cart_price >= 300000){
 $level_up = 3;
} else {
 $level_up = 2; // 기본 등급 지정
}

이렇게 금액이 미달일때 기본등급을 지정하실수도 있고.
이러면 매번 의미없는 쿼리가 발생하니까

if($cart_price >= 300000){
 $level_up = 3;
}

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

이렇게 레벨업 변수가 정의되었을때만 업데이트 시킬수도 있습니다.

 

답변에 대한 댓글 2개

그리고 한가지 팁으로

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

이렇게 쿼리에서 변수 사용시

mb_level = '{$level_up}'

이렇게 감싸주시면 더욱 안전합니다.

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