게시물의 다운로드마다 다른 포인트 적용하기 > 그누4 질문답변

그누4 질문답변

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

게시물의 다운로드마다 다른 포인트 적용하기 정보

게시물의 다운로드마다 다른 포인트 적용하기

본문

각각의 게시물 마다 다운로드시 다른 포인트 삭감을 위해 wr_1에 기록된 포인트 만큼 삭제 하게 하였는데요 몇가지 않되는게 있어서요^^;
 
1. download.head.skin.php(모르솔라준회원님의답변글)에서

// 체크
if (!$member[mb_id]) {
alert("로그인 후 이용하세요.", "$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$wr_id");
}
else if ($member[mb_point] < $write[wr_1]) {
alert("포인트가 부족합니다.", "$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$wr_id");
}

// 포인트 차감
insert_point($member[mb_id], $write[wr_1], "$board[bo_subject] $wr_id 다운로드", $bo_table, $wr_id, $g4['time_ymd']);
 
위와 같이 표기하면 다운받은 회원의 포인트가 삭제되는데 다시 다운로드를 받아도 해당 포인트 만큼 계속 삭제가 됩니다.
한번만 삭제 하게 할려면 어떻게 해야 하나요?
 
2. 한번 다운로드 받으면 24시간 내에 포인트 삭제 없이 계속 받게 할려면요?
$g4[time_ymd]를 붙이면 될것 같은데 않되더군요^^;
 
3. 그리고 포인트 내역에 가보면 내용에"$board[bo_table] $wr_id {$index}번 파일 다운로드" 이런식으로 나오는데 제대로 나오게 할 수 없나요?
 
게시물을 뒤져서 일루절루 표현 해 보았는데요 잘 않되더군요
그래서 원본으로 복원 후 문의드립니다.
  • 복사

댓글 전체

도움에 될지 모르겠습니다. 저도 배우는 입장인지라요;;

<?
$g4_path = "../../..";
include_once("$g4_path/common.php");

@include_once("$board_skin_path/download.head.skin.php");

// 포인트 부여
function insert_point2($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; }

    // 포인트 건별 생성
    $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;
}

// 쿠키에 저장된 ID값과 넘어온 ID값을 비교하여 같지 않을 경우 오류 발생
// 다른곳에서 링크 거는것을 방지하기 위한 코드
if (!get_session("ss_view_{$bo_table}_{$wr_id}"))
    alert("잘못된 접근입니다."); 

$sql = " select bf_source, bf_file from $g4[board_file_table]
          where bo_table = '$bo_table'
            and wr_id = '$wr_id'
            and bf_no = '$no' ";
$file = sql_fetch($sql);
if (!$file[bf_file])
    alert_close("파일 정보가 존재하지 않습니다.");

if ($member[mb_level] < $board[bo_download_level]) {
    $alert_msg = "다운로드 권한이 없습니다.";
    if ($member[mb_id])
        alert($alert_msg);
    else
        alert($alert_msg . "\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "$g4[bbs_path]/login.php?wr_id=$wr_id&$qstr&url=".urlencode("board.php?bo_table=$bo_table&wr_id=$wr_id"));
}

// 사용자 코드 실행
@include_once("$board_skin_path/download.skin.php");

// 이미 다운로드 받은 파일인지를 검사한 후 게시물당 한번만 포인트를 차감하도록 수정
$ss_name = "ss_down_{$bo_table}_{$wr_id}";
//if (!get_session($ss_name))
if (1)
{
    // 자신의 글이라면 통과
    // 관리자인 경우 통과
    if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
        ;
    else if ($board[bo_download_level] > 1) // 회원이상 다운로드가 가능하다면
    {
// 다운로드 포인트를 wr_10으로 대체
$temp = sql_fetch("select wr_10 from $write_table where wr_id = $wr_id");
$board[bo_download_point] = $temp[wr_10] * -1;

        // 다운로드 포인트가 음수이고 회원의 포인트가 0 이거나 작다면
        if ($member[mb_point] + $board[bo_download_point] < 0)
            alert("보유하신 포인트(".number_format($member[mb_point]).")가 없거나 모자라서 다운로드(".number_format($board[bo_download_point]).")가 불가합니다.\\n\\n포인트를 적립하신 후 다시 다운로드 해 주십시오.", "$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$wr_id");

        // 게시물당 한번만 차감하도록 수정
        insert_point2($member[mb_id], $board[bo_download_point], "$board[bo_subject] $wr_id 파일 다운로드", $bo_table, $wr_id, "다운로드");
    }

    // 다운로드 카운트 증가
    $sql = " update $g4[board_file_table] set bf_download = bf_download + 1 where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$no' ";
    sql_query($sql);

    set_session($ss_name, TRUE);
}

$g4[title] = "$group[gr_subject] > $board[bo_subject] > " . conv_subject($write[wr_subject], 255) . " > 다운로드";

$filepath = "$g4[path]/data/file/$bo_table/$file[bf_file]";
$filepath = addslashes($filepath);
if (preg_match("/^utf/i", $g4[charset]))
    $original = urlencode($file[bf_source]);
else
    $original = $file[bf_source];

if (file_exists($filepath)) {
    if(eregi("msie", $_SERVER[HTTP_USER_AGENT]) && eregi("5\.5", $_SERVER[HTTP_USER_AGENT])) {
        header("content-type: doesn/matter");
        header("content-length: ".filesize("$filepath"));
        header("content-disposition: attachment; filename=\"$original\"");
        header("content-transfer-encoding: binary");
    } else {
        header("content-type: file/unknown");
        header("content-length: ".filesize("$filepath"));
        header("content-disposition: attachment; filename=\"$original\"");
        header("content-description: php generated data");
    }
    header("pragma: no-cache");
    header("expires: 0");
    flush();

    if (is_file("$filepath")) {
        $fp = fopen("$filepath", "rb");

        // 4.00 대체
        // 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
        //if (!fpassthru($fp)) {
        //    fclose($fp);
        //}

        while(!feof($fp)) {
            echo fread($fp, 100*1024);
            flush();
        }
        fclose ($fp);
        flush();
    } else {
        alert("해당 파일이나 경로가 존재하지 않습니다.");
    }

} else {
    alert("파일을 찾을 수 없습니다.");
}

@include_once("$board_skin_path/download.tail.skin.php");
?>
bbs/download.php 파일을 바꾸는 건가요?
그렇다면 위 사항중 $g4_path = "../../.."; 의 경로만 고쳐서 업로드 시키고 다운로드 받아보면 "파일이 없습니다"라고 나오며 파일은 받지 못했는데도 포인트는 삭감 되네요^^;
view 파일에서

echo "<tr><td height=22>&nbsp;&nbsp;<img src='{$board_skin_path}/img/icon_file.gif' align=absmiddle> <a href=\"javascript:file_download('$board_skin_path/download2.php?bo_table={$bo_table}&wr_id={$view[wr_id]}&no={$i}', '{$view[file][$i][source]}');\" title='{$view[file][$i][content]}'><strong>{$view[file][$i][source]}</strong> ({$view[file][$i][size]}), Down : {$view[file][$i][download]}, {$view[file][$i][datetime]}</a></td></tr>";
포인트도 없어 얼마 걸지도 못하였는데 죄송합니다.

현재 되어 가는것 같은데요 게시물당 한번만 차감하도록 해야 하는데 현재는 계속 차감이 됩니다.
^^'

download.tail.skin.php에 아래와 같이 해둔게 있는데요
이부분을 삭제해도 똑같구요^^;

// 자신이 다운로드 받는 경우 차감한 포인트를 삭제한다
if ($is_admin || ($write[mb_id] == $member[mb_id] && $member[mb_id]))
//    $write[wr_datetime] < date("Y-m-d H:i:s", $g4[server_time] - 86400 * 30))
{
    delete_point($member[mb_id], $bo_table, $wr_id, '다운로드');
}
else
{
    // 한달이 지나지 않은 게시물
    //echo "if ($write[wr_datetime] > date(\"Y-m-d\", $g4[server_time] - 86400 * 30)) {"; exit;
    if ($write[wr_datetime] > date("Y-m-d", $g4[server_time] - 86400 * 30)) {
        // 게시자에게 포인트 50% 부여
        insert_point($write[mb_id], (int)(abs($board[bo_download_point])/2), "{$member[mb_nick]}님이 $board[bo_subject] $wr_id 파일 다운로드", $bo_table, $wr_id, "{$member[mb_nick]}님이 다운로드");
    }
}
해결 하였습니다.

가르쳐 주신데로 하니 다운로드 파일을 찾을 수 없다 하여 일루절루 삽질하다 bbs/dowload.php파일을 수정하여 완성하였습니다.^^
© SIRSOFT
현재 페이지 제일 처음으로