추천 비추천 여분필드에 있는 포인트 지급 차감 관련 문의

추천 비추천 여분필드에 있는 포인트 지급 차감 관련 문의

QA

추천 비추천 여분필드에 있는 포인트 지급 차감 관련 문의

본문

$is_success = false;
$ss_times = (int)$boset['na_gtimes']; // 횟수
$ss_name = 'ss_good_'.$bo_table.'_'.$wr_id; // 세션

if ($good == 'good' || $good == 'nogood') {

    if($write['mb_id'] == $member['mb_id']) {
        $error = '자신의 글에는 추천 또는 비추천 하실 수 없습니다.';
        print_result($error, $success, $count);
    }

    if (!$board['bo_use_good'] && $good == 'good') {
        $error = '이 게시판은 추천 기능을 사용하지 않습니다.';
        print_result($error, $success, $count);
    }

    if (!$board['bo_use_nogood'] && $good == 'nogood') {
        $error = '이 게시판은 비추천 기능을 사용하지 않습니다.';
        print_result($error, $success, $count);
    }

    $sql = " select bg_id, bg_flag, bg_datetime from {$g5['board_good_table']}
                where bo_table = '{$bo_table}'
                and wr_id = '{$wr_id}'
                and mb_id = '{$member['mb_id']}'
                and bg_flag in ('good', 'nogood') ";
    $row = sql_fetch($sql);
    if ($row['bg_flag']) {

        $good = $row['bg_flag'];

        if ($good == 'good')
            $status = '추천';
        else
            $status = '비추천';

        // 취소체크
        $cancel_sec = (int)$boset['na_gcancel'];
        if($cancel_sec > 0 && G5_SERVER_TIME < (strtotime($row['bg_datetime']) + $cancel_sec)) {
            if($ss_times > 0) {
                $times = get_session($ss_name);
                if($times) {
                    if($ss_times > $times) {
                        set_session($ss_name, $times + 1);
                    } else {
                        $error = "더이상 취소할 수 없습니다.";
                        print_result($error, $success, $count);
                    }
                } else {
                    set_session($ss_name, 1);
                }
            }
            
            // 내역 삭제
            sql_query(" delete from {$g5['board_good_table']} where bg_id = '{$row['bg_id']}' ");

            // 추천(찬성), 비추천(반대) 카운트 감소
            sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");

            $count = $write['wr_'.$good] - 1;
            $success = "$status 취소를 하셨습니다.";
            
        // 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
        if ($good == "nogood")    {        
        insert_point($write['mb_id'], '2', "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
        }        
        if ($good == "good") {         
        insert_point($write['mb_id'], '-2', "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'추천 취소');
        }

        
        } else {
            $error = "이미 $status 하셨습니다.";
        }

        print_result($error, $success, $count);

    } else{

        // 추천(찬성), 비추천(반대) 카운트 증가
        sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} + 1 where wr_id = '{$wr_id}' ");
    
        // 추천(찬성), 비추천(반대) 취소에 따른 포인트 적립
        if ($good == "nogood")    {        
        insert_point($write['mb_id'], '-2', "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천');
        }        
        if ($good == "good") {         
        insert_point($write['mb_id'], '2', "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 추천했습니다.", $bo_table, $wr_id, $member['mb_id'].'추천');
        }
        
        // 내역 생성
        sql_query(" insert {$g5['board_good_table']} set bo_table = '{$bo_table}', wr_id = '{$wr_id}', mb_id = '{$member['mb_id']}', bg_flag = '{$good}', bg_datetime = '".G5_TIME_YMDHIS."' ");

        $sql = " select wr_{$good} as count from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";
        $row = sql_fetch($sql);

        $count = $row['count'];

        if ($good == 'good')
            $status = '추천';
        else
            $status = '비추천';

        if($opt) {
            run_event('comment_increase_good_json', $bo_table, $wr_id, $good);
        } else {
            run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);
        }

        $is_success = true;
    }
}

 

위 추천 비추천 시 포인트 지급 및 차감이 되는데,   포인트 지급 차감을 게시판 wr_18  여분필드 값을 차감되게 하려고 하는데 포인트 부분에 어떻게 넣어야 할까요?

이 질문에 댓글 쓰기 :

답변 2

예를 들어 다음과 같이 해볼 수 있을 것 같습니다.

포인트를 wr_18에 저장하는 부분을 추가


// 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
if ($good == "nogood") {        
    // 비추천을 취소할 경우 포인트를 반환합니다.
    // 여기서 '-2'는 포인트를 차감하는 양입니다. 적절한 값을 사용해주세요.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = wr_18 - 2 where wr_id = '{$wr_id}' ");
    // 이하 포인트 취소 로직
}
if ($good == "good") {         
    // 추천을 취소할 경우 포인트를 반환합니다.
    // 여기서 '2'는 포인트를 지급하는 양입니다. 적절한 값을 사용해주세요.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = wr_18 + 2 where wr_id = '{$wr_id}' ");
    // 이하 포인트 취소 로직
}

아~ 제가 문의를 잘못 한거 같네요... 게시판에 글을 작성하고 관리자가 수정을 해서 wr_18에 저장을 할 수 있게 하고 있습니다 그래서 비추천을 눌렀을 때 위에 내용은 -2 포인트가 차감이 되는데 관리자가  wr_18에 넣었을 때 비추천 눌렀을 때 그 수치만큼 글작성자 포인트가 차감 되게 하려고 합니다

예를 들어 다음과 같이 해볼 수 있을 것 같습니다


// 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
if ($good == "nogood") {        
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = 0 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {
        // 여기서 '-2' 대신 포인트 차감하는 양을 $point_to_deduct로 설정합니다.
        insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
    }
    // 이하 포인트 취소 로직
}

와우 아주 잘 되네요. 알려주신 코드 보면서 공부도 많이 됐네요^^ 완전감사합니다  wr_18 비추천해서 차감되면 0으로 초기화가 되서 wr_18로 하니 관리자가 입력해 놓은 수치대로 남아 있네요^^ 아 그런데 혹시 글 작성자 포인트가  wr_18 차감될 수치보다 작으면 포인트가 부족합니다. 라는 메세지가 뜨고, 포인트 차감은 안되게 할 수 있나요? 현재는 -포인트로 되어서요~ 그렇게도 가능할까요?

다음과 같이 해보시는건 어떨까 합니다.


// 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
if ($good == "nogood") {        
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = 0 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {
        // 글 작성자의 현재 포인트를 가져옵니다.
        $writer_points = get_point($write['mb_id']);
        if ($writer_points >= $point_to_deduct) {
            // 포인트가 충분한 경우에만 차감하도록 합니다.
            insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
        } else {
            // 포인트가 부족한 경우 메시지를 표시합니다.
            $error = "포인트가 부족합니다.";
            print_result($error, $success, $count);
            exit; // 포인트가 부족하면 더 이상의 처리를 하지 않고 종료합니다.
        }
    }
    // 이하 포인트 취소 로직
}

// 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
if ($good == "nogood") {       
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = wr_18 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {
        // 여기서 '-2' 대신 포인트 차감하는 양을 $point_to_deduct로 설정합니다.
        insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
    }
    // 이하 포인트 취소 로직
}

} else {
$error = "이미 $status 하셨습니다.";
}

print_result($error, $success, $count);

} else{

// 추천(찬성), 비추천(반대) 카운트 증가
sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} + 1 where wr_id = '{$wr_id}' ");

위부분에서

// 추천(찬성), 비추천(반대) 취소에 따른 포인트 반환
if ($good == "nogood") {       
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = 0 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {
        // 글 작성자의 현재 포인트를 가져옵니다.
        $writer_points = get_point($write['mb_id']);
        if ($writer_points >= $point_to_deduct) {
            // 포인트가 충분한 경우에만 차감하도록 합니다.
            insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
        } else {
            // 포인트가 부족한 경우 메시지를 표시합니다.
            $error = "포인트가 부족합니다.";
            print_result($error, $success, $count);
            exit; // 포인트가 부족하면 더 이상의 처리를 하지 않고 종료합니다.
        }
    }
    // 이하 포인트 취소 로직
}
} else{

// 추천(찬성), 비추천(반대) 카운트 증가
sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} + 1 where wr_id = '{$wr_id}' ");

이렇게 변경 되는게 맞을까요?? 여러가지 방법을 해 봤는데, 포인트가 차감이 되지 않아서요~

첫번째 답변을 참고하셔서 추가된 부분을 적용하시면 됩니다.
그러면 wr_18에 저장된 포인트가 부족할 경우 에러메세지를 띄우면서 포인트 차감이 되지 않습니다

// 추천(찬성), 비추천(반대) 취소에 따른 포인트 적립
if ($good == "nogood") {       
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = wr_18 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {

  // 글 작성자의 현재 포인트를 가져옵니다.
        $writer_points = get_point($write['mb_id']);
        if ($writer_points >= $point_to_deduct) {

        // 여기서 '-2' 대신 포인트 차감하는 양을 $point_to_deduct로 설정합니다.
        insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
 
 } else {
            // 포인트가 부족한 경우 메시지를 표시합니다.
            $error = "포인트가 부족합니다.";
            print_result($error, $success, $count);
            exit; // 포인트가 부족하면 더 이상의 처리를 하지 않고 종료합니다.
        }
    }
    // 이하 포인트 취소 로직
}

알려주신 코드를 적용해 보았는데, 비추천을 누르면 숫자는 올라가고  작성자 포인트가 얼마나 있는지는 관계 없이 포인트 차감은 되지 않네요.ㅠㅠ 혹시 윗 부분이 무엇인가 잘못 넣었을까요?

다시 수정해 봤습니다. 참고해 보세요


if ($good == "nogood") {
    // 비추천을 취소할 경우 관리자가 지정한 포인트를 차감합니다.
    // $write['wr_18']에는 관리자가 설정한 값을 가져옵니다.
    $point_to_deduct = intval($write['wr_18']); // wr_18에 저장된 포인트 값을 가져옵니다.
    sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_18 = wr_18 where wr_id = '{$wr_id}' "); // wr_18 초기화
    if ($point_to_deduct > 0) {
        // 글 작성자의 현재 포인트를 가져옵니다.
        $writer_points = get_point($write['mb_id']);
        if ($writer_points >= $point_to_deduct) {
            // 포인트 차감
            insert_point($write['mb_id'], -$point_to_deduct, "{$board['bo_subject']} {$wr_id} 글에 {$member['mb_nick']}님이 비추천을 취소했습니다.", $bo_table, $wr_id, $member['mb_id'].'비추천 취소');
        } else {
            // 포인트가 부족한 경우 메시지를 표시합니다.
            $error = "포인트가 부족합니다.";
            print_result($error, $success, $count);
            exit; // 포인트가 부족하면 더 이상의 처리를 하지 않고 종료합니다.
        }
    }
    // 이하 포인트 취소 로직
}
답변을 작성하시기 전에 로그인 해주세요.
전체 473
QA 내용 검색

회원로그인

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