채택완료

좋아요 취소 기능에 대한 질문입니다!!

2022-07-22 (금) 02:04:20 5,795

제가 좋아요 취소 버튼을 만들고 싶어서 https://sir.kr/g5_tip/13384 분의 글을 보고 따라했는데

취소는 되는데 다시 좋아요를 클릭하면 클릭이 되질 않습니다 혹시 조언이나 어디를 만지면 된다는 말씀해주실수 있을까요

Copy
<?php

include_once('./_common.php');

 

run_event('bbs_good_before', $bo_table, $wr_id, $good);

 

@include_once($board_skin_path.'/good.head.skin.php');

 

// 자바스크립트 사용가능할 때

if(isset($_POST['js']) && $_POST['js'] === "on") {

    $error = $count = "";

 

    function print_result($error, $count, $msg='')

    {

    echo '{ "error": "' . $error . '", "count": "' . $count . '", "msg": "'.$msg.'" }';

        if($error)

    exit;

    }

   

 

    if (!$is_member)

    {

        $error = '회원만 가능합니다.';

        print_result($error, $count);

    }

 

    if (!($bo_table && $wr_id)) {

        $error = '값이 제대로 넘어오지 않았습니다.';

        print_result($error, $count);

    }

 

    $ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;

    if (!get_session($ss_name)) {

        $error = '해당 게시물에서만 추천 또는 비추천 하실 수 있습니다.';

        print_result($error, $count);

    }

 

    $row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} ", FALSE);

    if (!$row['cnt']) {

        $error = '존재하는 게시판이 아닙니다.';

        print_result($error, $count);

    }

 

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

    {

        if($write['mb_id'] == $member['mb_id']) {

            $error = '자신의 글에는 추천 또는 비추천 하실 수 없습니다.';

            print_result($error, $count);

        }

 

        if (!$board['bo_use_good'] && $good == 'good') {

            $error = '이 게시판은 추천 기능을 사용하지 않습니다.';

            print_result($error, $count);

        }

 

        if (!$board['bo_use_nogood'] && $good == 'nogood') {

            $error = '이 게시판은 비추천 기능을 사용하지 않습니다.';

            print_result($error, $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_id'])

        if($good != $row['bg_flag']){

            if ($row['bg_flag'] == 'good')

             $status = '추천';

            else

             $status = '비추천';

           

            $error = "이미 $status 하신 글 입니다.";

            print_result($error, $count);

           }else{

             // 추천(찬성), 비추천(반대) 카운트 감소

             sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");

             // 내역 삭제

             sql_query(" delete from {$g5['board_good_table']} where bg_id = '".$row['bg_id']."' ");

           

             $sql = " select wr_good,wr_nogood from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";

             $row = sql_fetch($sql);

           

             $count = $row['wr_'.$good];

           

             run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);

             

             if ($good == 'good')

             $status = '추천';

            else

             $status = '비추천';

           

            $msg = "이 글을 $status 하셨습니다.";

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

            }

           }

} else {

    include_once(G5_PATH.'/head.sub.php');

 

    if (!$is_member)

    {

        $href = G5_BBS_URL.'/login.php?'.$qstr.'&amp;url='.urlencode(get_pretty_url($bo_table, $wr_id));

 

        alert('회원만 가능합니다.', $href);

    }

 

    if (!($bo_table && $wr_id))

        alert('값이 제대로 넘어오지 않았습니다.');

 

    $ss_name = 'ss_view_'.$bo_table.'_'.$wr_id;

    if (!get_session($ss_name))

        alert('해당 게시물에서만 추천 또는 비추천 하실 수 있습니다.');

 

    $row = sql_fetch(" select count(*) as cnt from {$g5['write_prefix']}{$bo_table} ", FALSE);

    if (!$row['cnt'])

        alert('존재하는 게시판이 아닙니다.');

 

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

    {

        if($write['mb_id'] == $member['mb_id'])

            alert('자신의 글에는 추천 또는 비추천 하실 수 없습니다.');

 

        if (!$board['bo_use_good'] && $good == 'good')

            alert('이 게시판은 추천 기능을 사용하지 않습니다.');

 

        if (!$board['bo_use_nogood'] && $good == 'nogood')

            alert('이 게시판은 비추천 기능을 사용하지 않습니다.');

 

            $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_id'])

{

    if($good != $row['bg_flag'])

    {

        if ($row['bg_flag'] == 'good')

            $status = '추천';

        else

            $status = '비추천';

 

        $msg = "이미 $status 하신 글 입니다.";

        alert($msg, '', false);

    }

    else

    {

       

            // 추천(찬성), 비추천(반대) 카운트 감소

            sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");

            // 내역 삭제

            sql_query(" delete from {$g5['board_good_table']} where bg_id = '" . $row['bg_id'] . "' ");

 

            $sql = " select wr_good,wr_nogood from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";

            $row = sql_fetch($sql);

 

            $count = $row['wr_' . $good];

 

            if ($good == 'good')

                $status = '추천';

            else

                $status = '비추천';

 

            $href = get_pretty_url($bo_table, $wr_id);

 

            run_event('bbs_increase_good_html', $bo_table, $wr_id, $good, $href);

 

            $msg = $status . "이 취소되었습니다.";

            alert($msg, '', false);

            }

        }

    }

}

 

run_event('bbs_good_after', $bo_table, $wr_id, $good);

 

@include_once($board_skin_path.'/good.tail.skin.php');
|

답변 3개 / 댓글 5개

채택된 답변
+20 포인트

if문 모두 변경부분에서 제가 설명이 조금 부족했나보네요
아래 else문은 그대로 두어야합니다

bg_id와 bg_datetime을 들고오는 시점에서 아래부분에 if ($row['bg_flag']) > if ($row['bg_id']) 이런식으로 if문 조건이 변경된게 보이실겁니다
제가 말한 if문 내용 모두 변경은 기존 if ($row['bg_flag']) 이 조건안에 들어있던 내용모두 변경이지 여기 조건에서 else되는 부분(추천부분)은 그대로 두셔야합니다

답변에 대한 댓글 5개

팁내용도 수정해두었습니다
아닙니다 팁 자료는 너무 설명을 잘 해주셨는데 제가 잘못한거 같네요 한번 확인해보고 안되는 부분이 있으면 또 질문을 드려도 될까요?
혹시
[code]
$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_id'])

if($good != $row['bg_flag']){
if ($row['bg_flag'] == 'good')
$status = '추천';
else
$status = '비추천';

$error = "이미 $status 하신 글 입니다.";
print_result($error, $count);
}else{
$timestamp = strtotime($row['bg_datetime']." +5 minutes");
if($timestamp < strtotime(G5_TIME_YMDHIS)){
$msg = "취소는 5분이내에만 가능합니다.";
print_result($error, $count, $msg);
}else{
// 추천(찬성), 비추천(반대) 카운트 감소
sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");
// 내역 삭제
sql_query(" delete from {$g5['board_good_table']} where bg_id = '".$row['bg_id']."' ");

$sql = " select wr_good,wr_nogood from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";
$row = sql_fetch($sql);

$count = $row['wr_'.$good];

run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);

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

$msg = $status."이 취소되었습니다.";
print_result($error, $count, $msg);
}
}

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

run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);

print_result($error, $count);
}
}
}
[/code]

이런식으로 바꾸시라고 말씀하신게 맞는지 확인 가능하신가요?
설명해주신대로 해서 잘 됩니다 정말 감사합니다 !!
if ($row['bg_id']) 문 {}이 없는것 같은데 그것만 추가해주시면 될것같네요

배추베이직 게시판에 추천 취소 기능 내장되어 있으니 참고해 보세요.

소스만을 보고 판단하기에는 어려운부분이 있네요. 

좋아요 클릭시 데이터이스에 update가 잘되는지 값을 확인해보시면 될꺼 같은데요.!!

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