추천/비추천 응용한 투표 테이블 코드 에러좀 봐 주세요. > 그누4 질문답변

그누4 질문답변

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

추천/비추천 응용한 투표 테이블 코드 에러좀 봐 주세요. 정보

추천/비추천 응용한 투표 테이블 코드 에러좀 봐 주세요.

첨부파일

vote.php (3.6K) 8회 다운로드 2012-03-07 10:27:48
view.skin.php (22.3K) 0회 다운로드 2012-03-07 10:27:48

본문

게시판 환경 설정 및 mysql에서 db 해당 필드 추가 완료, 투표 테이블 추가 및 게시판 환경 설정체크가 완료된 상태입니다.

good.php를 응용하여 각 화일에 다음 구문을 추가했습니다. <각 태그의 속성은 삭제 표시함>
vote.php가 값을 넘겨 받지 못하고 있습니다.

요는 구누보드가 만들어 놓은 good.php는 되면서(값을 넘겨 받으면서) 제가 직접 흉내내서 만든 vote.php는 왜 안되는 것인지 그 이유를 알고자 함입니다.
값이 안 넘어 온다는 말은 구체적인 현상으로 말해서 값이 넘어 올 때 뜨는 alert() 경고창이 안 뜨고, vote 테이블에 투표내용 추가 update도 안되고, 물론 뷰페이지에서 투표 숫자가 올라가는 게 없다는 것입니다. 결국은 추천 클릭 후 숫자가 올라가기 까지의 flow에 제가 아직 모르는 어떤 과정이 있는건 아닌가 의심이 갑니다.
최근에 같은 질문을 여러번 올렸는데, 이제까지는 답변자들께서 그러면 안된다고는 하면서는 그 이유는 설명해 주시는 분이 없군요. 왜죠?


view.skin.php에서
=================
<!-- 여기부터 투표 테이블 -->
        <div><a href="<?=$vgood_href?>" target="hiddenframe">아주<br>공감해요</a></div> 
        <div ><?=number_format($view[wr_vgood])?></div>

        <div><a href="<?=$lgood_href?>" target="hiddenframe">대체로<br>공감해요</a></div>
      <div><?=number_format($view[wr_lgood])?></div>
 
      <div><a href="<?=$cntr_href?>" target="hiddenframe">음<br>...</a></div>
      <div ><?=number_format($view[wr_cntr])?></div>
 
      <div><a href="<?=$lbad_href?>" target="hiddenframe">글쎄요<br>그건 좀</a></div>
      <div ><?=number_format($view[wr_lbad])?></div>
 
      <div><a href="<?=$vbad_href?>" target="hiddenframe">그건<br>아니죠</a></div>
      <div ><?=number_format($view[wr_vbad])?></div>
 
view.php에서
============


$vgood_href = "";
$lgood_href = "";
$cntr_href = "";
$lbad_href = "";
$vbad_href = "";

    // 투표 링크
    if ($board[bo_use_vgood])          //아주 공감
        $vgood_href = "./vote.php?bo_table=$bo_table&wr_id=$wr_id&vote=vgood";

    if ($board[bo_use_lgood])          //대체로 공감
        $lgood_href = "./vote.php?bo_table=$bo_table&wr_id=$wr_id&vote=lgood";

    if ($board[bo_use_cntr])          //음....
        $cntr_href = "./vote.php?bo_table=$bo_table&wr_id=$wr_id&vote=cntr";

    if ($board[bo_use_lbad])          //글쎄
        $lbad_href = "./vote.php?bo_table=$bo_table&wr_id=$wr_id&vote=lbad";

    if ($board[bo_use_vbad])          //아닌데요
        $vbad_href = "./vote.php?bo_table=$bo_table&wr_id=$wr_id&vote=vbad";

vote.php에서는
=============

<?
include_once("./_common.php");

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

echo "<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'>";

if (!$is_member)
{
    $href = "./login.php?$qstr&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id");

    echo "<script type='text/javascript'>alert('회원만 가능합니다.'); top.location.href = '$href';</script>";
    exit;
}

if (!($bo_table && $wr_id))
    alert_close("값이 제대로 넘어오지 않았습니다.");

$ss_name = "ss_view_{$bo_table}_{$wr_id}";
if (!get_session($ss_name))
    alert_close("해당 게시물에서만 투표 하실 수 있습니다.");

$row = sql_fetch(" select count(*) as cnt from {$g4[write_prefix]}{$bo_table} ", FALSE);
if (!$row[cnt])
    alert_close("존재하는 게시판이 아닙니다.");

if ($vote == "vgood" || $vote == "lgood" || $vote == "cntr" || $vote == "lbad" || $good == "vbad")
{
    if($write[mb_id] == $member[mb_id])
        alert_close("자신의 글에는 투표하실 수 없습니다.");

    if (!$board[bo_use_vgood] && $vote == "vgood")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_lgood] && $vote == "lgood")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_cntr] && $vote == "cntr")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_lbad] && $vote == "lbad")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_vbad] && $vote == "vbad")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");


$sql = " select bv_flag from $g4[board_vote_table]
              where bo_table = '$bo_table'
                and wr_id = '$wr_id'
                and mb_id = '$member[mb_id]'
                and bv_flag in ('vgood', 'lgood', 'cntr', 'lbad', 'vbad') ";
    $row = sql_fetch($sql);
    if ($row[bv_flag])
    {
        if ($row[bv_flag] == "vgood")
            $status = "'매우 공감해요' 라고";
 
      else if ($row[bv_flag] == "lgood")
            $status = "'대체로 공감해요' 라고";

      else if ($row[bv_flag] == "cntr")
            $status = "'음....'이라고";

      else if ($row[bv_flag] == "lbad")
            $status = "'글쎄요 그건좀' 이라고";

      else
            $status = "'그건 아니죠'라고";
       
        echo "<script type='text/javascript'>alert('이미 \'$status\' 하신 글 입니다.');</script>";
    }
    else
    {
        // 카운트 증가
        sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_{$vote} = wr_{$vote} + 1 where wr_id = '$wr_id' ");
        // 내역 생성
        sql_query(" insert $g4[board_vote_table] set bo_table = '$bo_table', wr_id = '$wr_id', mb_id = '$member[mb_id]', bv_flag = '$vote', bv_datetime = '$g4[time_ymdhis]' ");

        if ($row[bv_flag] == "vgood")
            $status = "'매우 공감해요' 라고";
 
      else if ($row[bv_flag] == "lgood")
            $status = "'대체로 공감해요' 라고";

      else if ($row[bv_flag] == "cntr")
            $status = "'음.....'이라고";

    else if ($row[bv_flag] == "lbad")
            $status = "'글쎄요 그건좀' 이라고";

      else
            $status = "'그건 아니죠'라고";
       
      echo "<script type='text/javascript'> alert('이 글을 \'$status\' 하셨습니다.');</script>";
    }
}

@include_once("$board_skin_path/vote.tail.skin.php");
?>
<script type="text/javascript"> window.close(); </script>
  • 복사

댓글 전체

// 카운트증가
sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_{$vote} = wr_{$vote} + 1 where wr_id = '$wr_id' ");

위부분이 중요합니다

wr_{$vote} 의 필드가 없어서 안돼는것입니다

wr_vgood
wr_lgood
wr_cntr
wr_lbad
wr_vbad

위 필드가 해당게시판에 있어야합니다.
답변 감사드립니다.
그런데 해당 게시판에는 5개의 답변 필드가 이미 있습니다. (제가 새로 추가해 넣음) 어느분의 충고로 vote.php화일에서 상단 include_once("common.php") 바로  밑에 echo $vote를 붙여 넣어도 값이 안 넘어 옵니다.

엉뚱한 생각인데요 위의 view.skin.php에 있는 앵커태그 속성 target=hiddenframe이 해결의 열쇠가 아닌가도 의심해 봅니다. 제가 아직 모르는게 이 부분인데요 혹시 여기서 값을 넘겨 주기전에 무슨 작당을 한건 아닌지요.
include_once("./_common.php");

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

echo "<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'>";

if (!$is_member)
{
    $href = "./login.php?$qstr&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id");

    echo "<script type='text/javascript'>alert('회원만 가능합니다.'); top.location.href = '$href';</script>";
    exit;
}

if (!($bo_table && $wr_id))
    alert_close("값이 제대로 넘어오지 않았습니다.");

$ss_name = "ss_view_{$bo_table}_{$wr_id}";
if (!get_session($ss_name))
    alert_close("해당 게시물에서만 투표 하실 수 있습니다.");

$row = sql_fetch(" select count(*) as cnt from {$g4[write_prefix]}{$bo_table} ", FALSE);
if (!$row[cnt])
    alert_close("존재하는 게시판이 아닙니다.");

if ($vote == "vgood" || $vote == "lgood" || $vote == "cntr" || $vote == "lbad" || $vote == "vbad")
{
    if($write[mb_id] == $member[mb_id])
        alert_close("자신의 글에는 투표하실 수 없습니다.");

    if (!$board[bo_use_vgood] && $vote == "vgood")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_lgood] && $vote == "lgood")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_cntr] && $vote == "cntr")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_lbad] && $vote == "lbad")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");

    if (!$board[bo_use_vbad] && $vote == "vbad")
        alert_close("이 게시판은 투표 기능을 사용하지 않습니다.");


$sql = " select bv_flag from $g4[board_vote_table]
              where bo_table = '$bo_table'
                and wr_id = '$wr_id'
                and mb_id = '$member[mb_id]'
                and bv_flag in ('vgood', 'lgood', 'cntr', 'lbad', 'vbad') ";
    $row = sql_fetch($sql);
    if ($row[bv_flag])
    {
        if ($row[bv_flag] == "vgood")
            $status = "'아주 공감해요' 라고";
 
if ($row[bv_flag] == "lgood")
            $status = "'대체로 공감해요' 라고";

if ($row[bv_flag] == "cntr")
            $status = "'음....'이라고";

if ($row[bv_flag] == "lbad")
            $status = "'글쎄요 그건좀' 이라고";

if ($row[bv_flag] == "vbad")
            $status = "'달리 생각해요'라고";
       
        echo "<script type='text/javascript'>alert(\"이미  " . $status . "  하신 글 입니다.\");parent.location.reload();</script>";
    }
    else
    {
        // 카운트 증가
        sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_{$vote} = wr_{$vote} + 1 where wr_id = '$wr_id' ");
        // 내역 생성
        sql_query(" insert $g4[board_vote_table] set bo_table = '$bo_table', wr_id = '$wr_id', mb_id = '$member[mb_id]', bv_flag = '$vote', bv_datetime = '$g4[time_ymdhis]' ");

        if ($vote == "vgood")
            $status = "'아주 공감해요' 라고";
 
if ($vote == "lgood")
            $status = "'대체로 공감해요' 라고";

if ($vote == "cntr")
            $status = "'음.....'이라고";

if ($vote == "lbad")
            $status = "'글쎄요 그건좀' 이라고";

        if ($vote == "vbad")
            $status = "'달리 생각해요'라고";
       
        echo "<script type='text/javascript'> alert(\"이 글을 " . $status . " 하셨습니다.\");parent.location.reload();</script>";
    }
}

@include_once("$board_skin_path/vote.tail.skin.php");
?>
<script type="text/javascript"> window.close(); </script>
소스를 비교해보시면 알겠지만 잘못된곳이 있어 작동을 안했으며
parent.location.reload();

는 바로 적용하고 바로 그페이지 새로고침을 해주는것입니다.
새로고침을 해야 바로바로 적용했다는것을 확인가능합니다.
자세히 들여다 보니 오류가 좀 있었네요. 마지막 if문에 $row[bv_flag] --> $vote 등, 등.

그런데 궁극적으로 안 되었던 이유를 귀하로부터 힌트를 얻어 찾아냈습니다.
문구의 오류 부분이 아니라 변수 $g4[board_vote_table]이라는 것 때문이네요.
넘어 오는 값 확인 방법을 이번에 배워 실험해 보니 $vote 값들(5개)은 제대로 넘어 오는데 바로 위의 db table 이름 값이 안 넘어옵디다. 제가 기존의 g4_board_good 테이블과 같은 구조(필드명만 약간 수정)의 g4_board_vote를 phpmyadmin에서 직접 만들어 넣었는데 이것이 $g4[board_vote_table]의 배열로 자동 삽입이 안되는가 봅니다.
그래서 테이블 이름을 'g4_board_vote'로써 sql문에 직접 써 넣으니 일순간에 만사 o.k. 열흘 동안 동굴에 갇혔다가 빠져나온 기분입니다.  그 덕분에 여러가지 배웠습니다.

감사드립니다.
sql_query(" insert *into* $g4[board_vote_table] set bo_table = '$bo_table', wr_id = '$wr_id', mb_id = '$member[mb_id]', bv_flag = '$vote', bv_datetime = '$g4[time_ymdhis]' ");
*into* 부분이 빠졌네요, 별 표시는 제거하고 적용해보세요,
into가 있으면 좋지만 없다고 sql 실행이 안되는 것은 아닌듯 하네요.
요는 $vote로 넘겨 받는 값이 있어야 하는데 이게 없으니 sql_guery()가 할 일이 없어 보입니다.
아 이 걸로 열흘 이상을 보내네요.
© SIRSOFT
현재 페이지 제일 처음으로