제로보드4 설문조사 버그 수정을 위해 아래와 같이 고쳐도 안돼요. 블록

미치겠네요. 이런 요상한 버그는 처음인데 혹시 reply_check.php 안에 들어있는 $subject 변수 때문인가 해서 그 안의 변수를 몽땅 $subject2 로 바꾸고 파일 네임도 reply_check2.php로 바꾸고 인클루드를 시켜봐도 마찬가지네요. 나머지 파일의 변수들도 아래와 같이 엘레시엘님 말씀대로 $subject2로 바꾸고 unset 명령으로 mysql 쿼리가 배열로 저장되는 부분을 초기화 해보아도 마찬가지네요. 심지어는 vote_check.php 13행의 $subject2=$reply_data[subject]; 를 주석처리까지 해보았지만 증상은 마찬가지입니다.

이거 어떤 로직상의 버그라기 보다 PHP 동작 상의 어떤 문제같아 보이는데 해결법을 잘 모르겠네요. 희안한 게 설문제목 넣고 항목 추가를 하면 설문제목과 마지막 항목 제목이 같게 보이다가도 리로딩을 하면 이상하게 정상적으로 저장된 DB 내용이 출력된다는 겁니다.

모바일에서 소스가 잘 안보이시는 분은 다음 링크 클릭: http://bit.ly/1QdQvtw

[bbs/skin/zero_vote/view.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
<table border=0 width=<?=$width?> cellspacing=0 cellpadding=0>
<col width=13></col> <col width=></col> <col width=13></col>
<tr>
    <td><img src=<?=$dir?>/1.gif border=0></td>
    <td background=<?=$dir?>/2.gif width=100%>
    <td><img src=<?=$dir?>/3.gif border=0></td>
</tr>
<tr>
    <td background=<?=$dir?>/4.gif><img src=<?=$dir?>/4.gif border=0></td>
    <td width=100%>
        <table border=0 cellspacing=0 cellpadding=0 width=100% height=25>
        <tr>
            <td width=70>Subject</td>
            <td style='word-break:break-all;'><img src=images/t.gif border=0 height=1><br><?=$data[subject]?><font size=1 color=444444>(<?=$vote?> voted)</td>
        </tr>
        </table>
<?
//// 삭제하지 마세요;; 설문조사를 위한 프로그램 불러오는 부분입니다 //////
include "include/vote_check.php";
//// 위의 파일에서는 현재 스킨디렉토리의 vote_list.php파일을 불러씁니다///
?>
 
    </td>
    <td background=<?=$dir?>/6.gif><img src=<?=$dir?>/6.gif border=0></td>
</tr>
<tr>
    <td background=<?=$dir?>/4.gif><img src=<?=$dir?>/4.gif border=0></td>
    <td><font color="blue">투표합계 검증: </font>개별투표수와 전체 투표수가 <? if(($data[vote]==1&&$hop_vote==0)||$data[vote]==$hop_voteecho "일치함"else echo "<font color='red'>일치하지 않음!</font>"?></td>
    <td background=<?=$dir?>/6.gif><img src=<?=$dir?>/6.gif border=0></td>
</tr>
<tr>
    <td><img src=<?=$dir?>/7.gif border=0></td>
    <td background=<?=$dir?>/8.gif width=100%>
    <td><img src=<?=$dir?>/9.gif border=0></td>
</tr>
</table>
<!-- 간단한 답글 시작하는 부분 -->
<?=$hide_comment_start?>

[bbs/include/vote_check.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
if(preg_match("/:\/\//i",$dir)||preg_match("/\.\./i",$dir)) $dir ="./";
 
if(!$data[vote]) $data[vote]=1;
 
unset($reply_result);
unset($reply_data);
$reply_result=mysql_query("select * from $t_board"."_$id where headnum='$data[headnum]' and depth>0 order by arrangenum");
 
$hop_vote=0;
while($reply_data=mysql_fetch_array($reply_result)) {
    include "include/reply_check2.php";
    //$subject2=$reply_data[subject];
    $a_vote="<a href=apply_vote.php?id=$id&no=$data[no]&sub_no=$reply_data[no]&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&cn=$sn&ss=$ss&sc=$sc&keyword=$keyword&category=$category>";
    $bar_size=(int)(($reply_data[vote]/$data[vote])*100);
    $vote=$reply_data[vote];
    $hop_vote+=$vote;
    include "$dir/vote_list.php";
}
?>

[bbs/skin/zero_vote/vote_list.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? /* //////////////////////
   <?=$bar_size?> : %로 나타난 설문의 결과치입니다
   ////////////////////// */ ?>
 
<table border=0 cellspacing=0 cellpadding=2 width=100%>
<tr>
  <td background=<?=$dir?>/5.gif><img src=<?=$dir?>/5.gif border=0></td>
</tr>
<tr>
  <td colspan=2 style='word-break:break-all;' width=100%>
    <?=$a_vote?><?=$subject2?></b></a> ( <?=$vote?> ) <?=$a_modify?><img src=<?=$dir?>/v.gif border=0 align=absmiddle></a> <?=$a_delete?><img src=<?=$dir?>/x.gif border=0 align=absmiddle></a> 
  </td>
</tr>
<tr>
  <td width=100%>
    <table border=0 width=100% height=6 cellspacing=0 cellpadding=0>
    <tr>
      <td width=1%><table border=0 width=100% height=6 bgcolor=666666 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>
      <td width=90%>
        <table border=0 width=<?=$bar_size?>% height=6 bgcolor=666666 cellspacing=0 cellpadding=0><tr><td></td></tr></table>
      </td>
      <td width=9%><?=$bar_size?>%</td>
    </tr>
    </table>
  </td>
</tr>
</table>
 

[bbs/include/reply_check2.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?
// 검색어에 해당하는 글자를 빨간;; 색으로 바꾸어줌;;
if($keyword) {
    if($sn=="on"$reply_data[name]=str_replace($keyword,"<font color=red>$keyword</font>",$reply_data[name]);
    if($ss=="on"$reply_data[subject]=str_replace($keyword,"<font color=red>$keyword</font>",$reply_data[subject]);
    if($sc=="on"$reply_data[memo]=str_replace($keyword,"<font color=red>$keyword</font>",$reply_data[memo]);
    if($ss=="on"&&$setup[cut_length]>0) $setup[cut_length]=$setup[cut_length]+16;
}
 
// ' 등의 특수문자때문에 붙인 \(역슬래쉬)를 떼어낸다
$name=$reply_data[name]=stripslashes($reply_data[name]);  // 이름
$email=$reply_data[email]=stripslashes($reply_data[email]);  // 메일
$subject2=$reply_data[subject]=stripslashes($reply_data[subject]); // 제목
$subject2=cut_str($subject2,$setup[cut_length]); // 제목 자르는 부분
if($member[level]<=$setup[grant_view]) $subject2="<a href=view.php?$href$sort&no=$reply_data[no]>".$subject2."</a>"// 제목에 링크 거는 부분;
$homepage=$reply_data[homepage]=stripslashes($reply_data[homepage]);
if($homepage$homepage="<a href=$homepage target=_blank>$homepage</a>";
$memo=$reply_data[memo]=nl2br(stripslashes($reply_data[memo])); // 내용
$memo=autolink($memo); // 자동링크 거는 부분;;
$hit=$reply_data[hit];  // 조회수
$vote=$reply_data[vote];  // 투표수
if($setup[use_showip]||$is_admin)$ip="IP Address : ".$reply_data[ip]."&nbsp;";  // 아이피
$comment_num="[".$reply_data[total_comment]."]"// 간단한 답글 수
$sitelink1=$reply_data[sitelink1]=stripslashes($reply_data[sitelink1]);
$sitelink2=$reply_data[sitelink2]=stripslashes($reply_data[sitelink2]);
if($sitelink1)$sitelink1="<a href=$sitelink1 target=_blank>$sitelink1</a>";
if($sitelink2)$sitelink2="<a href=$sitelink2 target=_blank>$sitelink2</a>";
$file_name1=$reply_data[s_file_name1];
$file_name2=$reply_data[s_file_name2];
$file_download1=$reply_data[download1];
$file_download2=$reply_data[download2];
 
if($file_name1) {
    $file_size1=@GetFileSize(filesize($reply_data[file_name1]));
    $a_file_link1="<a href=download.php?$href$sort&no=$reply_data[no]&filenum=1>";
else $a_file_link="<Zeroboard";
 
if($file_name2) {
    $file_size2=@GetFileSize(filesize($reply_data[file_name2]));
    $a_file_link2="<a href=download.php?$href$sort&no=$reply_data[no]&filenum=2>";
else $a_file_link="Zeroboard";
 
if($comment_num==0) $comment_num="";
 
$upload_image1=$upload_image2="";
 
if(preg_match("/\.jpg/i",$file_name1)||preg_match("/\.gif/i",$file_name1)||preg_match("/\.png/i",$file_name1)) $upload_image1="<img src=$reply_data[file_name1] border=0><br>";
if(preg_match("/\.jpg/i",$file_name2)||preg_match("/\.gif/i",$file_name2)||preg_match("/\.png/i",$file_name2)) $upload_image2="<img src=$reply_data[file_name2] border=0><br>";
 
// 카테고리의 이름을 구함
if($reply_data[category]&&$setup[use_category]) $category_name=$category_data[$reply_data[category]];
else $category_name="&nbsp;";
 
// 글쓴 시간을 년월일 시분초 로 변환함
$reg_date="<span title='".date("Y년 m월 d일 H시 i분 s초"$reply_data[reg_date])."'>".date("Y/m/d"$reply_data[reg_date])."</span>";
 
$temp_name = get_private_icon($reply_data[ismember], "2");
if($temp_name$name="<img src='$temp_name' border=0 align=absmiddle>";
 
// 메일주소가 있으면 이름에 메일 링크시킴
if(!isBlank($email)||$reply_data[ismember]) {
    if(!$setup[use_formmail]) $name="<a href=mailto:$email>$name</a>";
    else $name="<a href=javascript:void(window.open('view_info.php?to=$email&id=$id&member_no=$reply_data[ismember]','mailform','width=400,height=500,statusbar=no,scrollbars=yes,toolbar=no'))>$name</a>";
}
 
// Depth에 의한 들임값을 정함
$insert="";
for($z=0;$z<$reply_data[depth];$z++) $insert .="&nbsp; ";
 
$icon=get_icon($reply_data);
 
// 이름앞에 붙는 아이콘 정의;;
$face_image=get_face($reply_data);
 
// 바로 전에 본 글인 경우 번호를 아이콘으로 바꿈
if($no==$reply_data[no]) $number="<img src=$dir/arrow.gif border=0 align=absmiddle>"; elseif($number!="&nbsp;"$number=$roop_number;
 
// 답글 버튼
if(($is_admin||$member[level]<=$setup[grant_reply])&&$reply_data[headnum]>-2000000000&&$reply_data[headnum]!=-1) $a_reply="<a href=write.php?$href$sort&no=$reply_data[no]&mode=reply>"else $a_reply="<Zeroboard";
// 삭제버튼
if(($is_admin||$member[level]<=$setup[grant_delete]||$reply_data[ismember]==$member[no]||!$reply_data[ismember])&&!$reply_data[child]) $a_delete="<a href=delete.php?$href$sort&no=$reply_data[no]>"else $a_delete="<Zeroboard";
// 수정버튼
if(($is_admin||$member[level]<=$setup[grant_delete]||$reply_data[ismember]==$member[no]||!$reply_data[ismember])) $a_modify="<a href=write.php?$href$sort&no=$reply_data[no]&mode=modify>"else $a_modify="<Zeroboard";
?>

덧글

  • 지나가다.. 2014/12/07 19:27 # 삭제 답글

    github나 구글이나 네이버도 버전 관리 도구를 제공합니다.
    오픈소스로 관리하실꺼면 svn이나 git을 써서 관리하시는게 어떠실지요.

    가끔 밸리에서 뵙는데 안타까워 덧글남겨봅니다.
  • 희망의빛™ 2014/12/07 19:33 #

    사실 이게 공식적인 제로보드4 브랜치로 이끌어 나가려면 제로보드 원자작자의 허락도 있어야 하고 해서 그냥 전 비공식적인 루트로 현재로선 제가 혼자 힘으로 개인적인 공간에서 버전업된 소스를 제공하고 있는 것입니다. 도움이 필요하면 이렇게 블로그에서 자문을 구하기도 하구요. ^^;
  • 지나가다.. 2014/12/07 19:40 # 삭제

    제 말에 조금 오해가 있었나보네요.
    공식 브랜치로 이끌어 나가라는 의미가 아닙니다.
    수정하시는 소스 관리 자체를 버전관리도구를 사용하여 하시라는 의미입니다.

    "오픈소스 게시판"을 처음 다운받아보았는데 zb4 기반 소스에 대한 수정 및 재배포를 하고 계시니,
    게시판에서 통파일로 관리하시거나 버전 관리 도구를 이용하거나 법적책임은 동일할 것 같습니다.

    최종 골이 무엇인지는 알 수 없으나 이력 관리, 학습, 내공향상, 협업 등 모든 방면에서 도구를 이용해보시길 추천드립니다.
  • 지나가다.. 2014/12/07 19:33 # 삭제 답글

    0. 개발은 끊임없이 자기와 마주하고 컴퓨터에게 마주한 자기를 설명하는 과정이지만,
    기술적으로 도움받을 수 있는 많은 경로가 있습니다.
    항상 다음 사이트에서 기술 지원을 받아보세요.
    http://google.com
    1. 현재 적이 없으시 한국직업전문학교(http://www.hanguktc.or.kr) 등에서 다양한 교육들을 제공받을 수 있습니다.
    2. php에 대한 학습이 부족하시다면 해당 사이트를 추천합니다
    http://www.phpschool.com
    3. 제가 zb4를 쓴지 오래라... zb4자체에 대한 의문은 해당 사이트에 상당부분 질문과 답변이 있을 것 같습니다.
    https://www.xpressengine.com/qna
  • 희망의빛™ 2014/12/07 19:55 #

    구글 검색은 항상 이용을 하고 있구요. phpschool은 간혹 검색 결과에 나오기는 하지만 레퍼런스가 그렇게 신통치는 않은 것 같더라구요.(그래도 도움을 얻는 경우도 많았습니다) XE 사이트는 제가 간혹 들어가 살펴보긴 한답니다. 거기다 질문하면 도움을 얻을 수는 있겠지만 여기에 올리는게 더 편안한 것 같아서요. 여러가지 다른 관심사도 나눌 수 있구요. XE 사이트에 자주 놀러가서 신선한 스킬들을 더 참고해야 할 것 같아요. 질문은 왠지 여기가 더 편해요. 거긴 왠지 틀에 갇혀 있는 느낌이 들어서요. 여긴 사회고 거긴 학교다 라는 느낌... ㅋㅋ
  • 2014/12/07 21:25 # 삭제 답글

    학교부터 다녀야 하는거 아닌가....?
  • 미르 2014/12/08 08:16 # 답글

    꼭 공부 못 하는 애들이 학교는 자기랑 안 맞다고 하지.
  • Hide_D 2014/12/08 10:21 # 답글

    본 코드에는 설문조사의 $subject (현재 $data['subject']) 를 받아오는 코드가 보이지 않네요.


    *. $data[subject] 식으로 쓰고 있는데 용케도 에러 없이 동작하네요.
    http://php.net/manual/en/language.types.array.php#language.types.array.foo-bar
    본 문제와 큰 관련이 있어보이지는 않지만 가급적 수정하세요.
  • 희망의빛™ 2014/12/08 19:48 # 답글

    버그 해결했습니다. ^^; 다음 링크를 참고하세요.

    http://blrun.egloos.com/11144003
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색