게시물 클릭할때 포인트 추가 또는 감소할경우 ID단위말고 쿠키로 중복막는 방법있나요? > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

게시물 클릭할때 포인트 추가 또는 감소할경우 ID단위말고 쿠키로 중복막는 방법있나요? 정보

게시물 클릭할때 포인트 추가 또는 감소할경우 ID단위말고 쿠키로 중복막는 방법있나요?

본문

또 질문 올립니다..ㅠㅠ
 
게시물클릭할때 포인트 추가로 해놧더니 아이디여러개 만들어서 포인트 불리는 유저가...ㅠㅠ
 
물론 다 막는건 불가능하겠지만요..
 
그래서 같은아이디로는 이중클릭해도 물론 포인트가 가산되지 않는데요..
 
같은컴퓨터로 다른 아이디로 접속했을때도 포인트가 가산 되지않게 하는 방법 있나요?
 
그 경우 경고창 뜨게하는것도 가르쳐주시면 감사하겠습니다!!!
 
부탁합니다!!!

댓글 전체

쿠키로 체크하는 방법은 비추천입니다.
가장 정확한 방법은 1차로 아이디로 체크하고 2차로 아이피로 체크를 하도록하는 방법외에는
없을듯 보입니다만 이것도 프록시 서버로 경유할 경우 막을 방법이 없습니다.
두부다 고맙습니다...그런데요..포인트 인서트부분의 액션에 아이피값을 넣으라는데...ㅠㅠ
도데체 어떤 소스를 어떻게 넣어야하는지 도무지 무르겟습니다..
제가 무식한지라 가르침 부탁합니다!
그누 기본 포인트 인서트 함수로 는 문제점이 있군요.
그누보드에서 사용중인 전체포인트 인서트문마다 아이피값을 넣어줘야 하는 문제가 있네요.
(이경우 관리자 모드에서 포인트 인서트시 문제가 있습니다.)

아래처럼 별도로 함수를 하나더 만들어서 적용해야 할듯 합니다.


// 포인트 부여
//아이피를 체크하기 위해서 전용 평션을 하나더 만듬
function insert_pointms($mb_id, $point, $content='', $rel_table='', $rel_id='', $rel_action='')
{
    global $config;
    global $g4;
    global $is_admin;

    // 포인트 사용을 하지 않는다면 return
    if (!$config[cf_use_point]) { return 0; }

    // 포인트가 없다면 업데이트 할 필요 없음
    if ($point == 0) { return 0; }

    // 회원아이디가 없다면 업데이트 할 필요 없음
    if ($mb_id == "") { return 0; }
    $mb = sql_fetch(" select mb_id from $g4[member_table] where mb_id = '$mb_id' ");
    if (!$mb[mb_id]) { return 0; }

    // 이미 등록된 내역이라면 건너뜀
    if ($rel_table || $rel_id || $rel_action)
    {
        $sql = " select count(*) as cnt from $g4[point_table]
                  where mb_id = '$mb_id'
                    and po_rel_table = '$rel_table'
                    and po_rel_id = '$rel_id'
                    and po_rel_action = '$rel_action' ";
        $row = sql_fetch($sql);
        if ($row[cnt])
            return -1;

// 중복 아이피를 걸러내기 위해서 회원 아이디는 무시하고 아이피로 한번더 검사함

        $sql2 = " select count(*) as cnt from $g4[point_table]
                  where po_rel_table = '$rel_table'
                    and po_rel_id = '$rel_id'
                    and po_rel_action = '$rel_action' ";
        $row2 = sql_fetch($sql2);
        if ($row2[cnt])
            return -1;
    }
    // 포인트 건별 생성
    $sql = " insert into $g4[point_table]
                set mb_id = '$mb_id',
                    po_datetime = '$g4[time_ymdhis]',
                    po_content = '".addslashes($content)."',
                    po_point = '$point',
                    po_rel_table = '$rel_table',
                    po_rel_id = '$rel_id',
                    po_rel_action = '$rel_action' ";
    sql_query($sql);

    // 포인트 내역의 합을 구하고
    $sql = " select sum(po_point) as sum_po_point from $g4[point_table] where mb_id = '$mb_id' ";
    $row = sql_fetch($sql);
    $sum_point = $row[sum_po_point];

    // 포인트 UPDATE
    $sql = " update $g4[member_table] set mb_point = '$sum_point' where mb_id = '$mb_id' ";
    sql_query($sql);

    return 1;
}


위처럼 평션을 하나더 만든후
글읽기시 포인트 차감이나 더해 줄때에 아래처럼 하세요.

//포인트 인서트시 아이피를 추가함
insert_pointms($member[mb_id], $board[bo_read_point], "$board[bo_subject] $wr_id 글읽기", $bo_table, $wr_id, "읽기".$_SERVER[REMOTE_ADDR]."");
헐랭이님 감사합니다..뭔가 보일려고 하네요.그러면 전용평션을 /lib/common.lib.php에다가 넣어주면 되는건가요? 아니면 스킨파일에 직접 넣어줘야할까요..참고로 포인트 인서트 소스는

insert_point($member[mb_id], $link_point, "$board[bo_subject] $no $write[wr_subject] 클릭", $bo_table, $wr_id, "읽기_{$g4[time_ymd]}_{$no}");

이런식으로 되어있는데요.

밑에처럼 바꾸면 되겠죠?

insert_point($member[mb_id], $link_point, "$board[bo_subject] $no $write[wr_subject] 클릭", $bo_table, $wr_id, "읽기1_{$g4[time_ymd]}_{$no}", "읽기2".$_SERVER[REMOTE_ADDR]."");
common.lib.php 에 저 평션을 추가해 준후 인서트문은 아래처럼 해야겠죠. insert_pointms() 를 적용


insert_pointms($member[mb_id], $link_point, "$board[bo_subject] $no $write[wr_subject] 클릭", $bo_table, $wr_id, "읽기1_{$g4[time_ymd]}_{$no}", "읽기2".$_SERVER[REMOTE_ADDR]."");
감사합니다. 테스트하니까 잘되네요,,그런데 저렇게하니까 게시물이 전부다 아이피로 막아져버리네요...;;; 게시물 하나 확인하니까 다른 게시물도 아이피로 다 막아져서 포인트가 가산되지가 않습니다..어렵다..ㅠㅠ
인스트 부분에서 뭔가 잘못된것 같은데요.?

인스트시 마자막 3부분이 이렇게 되어야만 게시판+글번호+아이피 로 비교 합니다.

insert_pointms($member[mb_id], $board[bo_read_point], "$board[bo_subject] $wr_id 글읽기", $bo_table, $wr_id, "읽기".$_SERVER[REMOTE_ADDR]."");
http://www.sir.co.kr/bbs/tb.php/g4_qa/41517

헐랭이님 제가 지금 사용하고 있는팁입니다..예전에 헐랭이님께서 가르쳐주셨던 인서트 사용하고 있어요;

pointdel.php을 수정해야하거든요
나름대로 연구중인데요...이런식으로하면 될까요;;

insert_pointms($member[mb_id], $link_point, "$board[bo_subject] $no $write[wr_subject] 클릭", $bo_table, $wr_id, "읽기1_{$g4[time_ymd]}_{$no}_{$_SERVER[REMOTE_ADDR]}");
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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