login_chack.skin
로그인을할때 현제까지 누적금액을 계산해서 등급을 자동으로 높히려고하는대요..
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개
$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개
https://sir.kr/boards/yc5_tip/2467?search_type=subject_content&keyword=%EC%9E%90%EB%8F%99
답변을 작성하려면 로그인이 필요합니다.
$sql= " update {$g5['member_table']} set mb_level = '$level_up' where mb_id = '$mb_id' "; sql_query($sql);
이렇게 쿼리에서 변수 사용시
mb_level = '{$level_up}'
이렇게 감싸주시면 더욱 안전합니다.