테스트 사이트 - 개발 중인 베타 버전입니다

게시판 댓글 문의드립니다. 채택완료

디자인럽 6년 전 조회 1,935

게시판에서 비밀글로 쓴 댓글을 볼수 있는 사람을 권한9만 볼수 있게끔 하고싶은데 어떻게 해야되나요?

즉 비밀글 체크 안한 댓글은 모두 보고 비밀글 체크 한 댓글은 권한이 9인 사람들만 모두 볼수 있게 하고싶어요.

 

</p>

<p><?

if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

?></p>

<p><script type="text/javascript">

// 글자수 제한

var char_min = parseInt(<?=$comment_min?>); // 최소

var char_max = parseInt(<?=$comment_max?>); // 최대

</script></p>

<p><? if ($cwin==1) { ?><table width=100% cellpadding=10 align=center><tr><td><?}?></p>

<p><!-- 코멘트 리스트 -->

<div id="commentContents">

<?

for ($i=0; $i<count($list); $i++) {

    $comment_id = $list[$i][wr_id];

?>

<a name="c_<?=$comment_id?>"></a>

<table width=100% cellpadding=0 cellspacing=0 border=0>

<tr>

    <td><? for ($k=0; $k<strlen($list[$i][wr_comment_reply]); $k++) echo "     "; ?></td>

    <td width='100%'></p>

<p>        <table border=0 cellpadding=0 cellspacing=0 width=100%>

        <tr>

            <td height=1 colspan=3 bgcolor="#dddddd"><td>

        </tr>

        <tr>

            <td height=1 colspan=3></td>

        </tr>

        <tr>

            <td valign=top>

                <div style="height:28px; background:url(<?=$board_skin_path?>/img/co_title_bg.gif); clear:both; line-height:28px;">

                <div style="float:left; margin:2px 0 0 2px;">

                <strong><?=$list[$i][name]?></strong>

                <span style="color:#888888; font-size:11px;"><?=$list[$i][datetime]?></span>

                </div>

                <div style="float:right; margin-top:5px;">

                <? if ($is_ip_view) { echo " <span style=\"color:#B2B2B2; font-size:11px;\">{$list[$i][ip]}</span>"; } ?>

                <? if ($list[$i][is_reply]) { echo "<a href=\"javascript:comment_box('{$comment_id}', 'c');\"><img src='$board_skin_path/img/co_btn_reply.gif' border=0 align=absmiddle alt='답변'></a> "; } ?>

                <? if ($list[$i][is_edit]) { echo "<a href=\"javascript:comment_box('{$comment_id}', 'cu');\"><img src='$board_skin_path/img/co_btn_modify.gif' border=0 align=absmiddle alt='수정'></a> "; } ?>

                <? if ($list[$i][is_del])  { echo "<a href=\"javascript:comment_delete('{$list[$i][del_link]}');\"><img src='$board_skin_path/img/co_btn_delete.gif' border=0 align=absmiddle alt='삭제'></a> "; } ?>

                 

                </div>

                </div></p>

<p>                <!-- 코멘트 출력 -->

                <div style='line-height:20px; padding:7px; word-break:break-all; overflow:hidden; clear:both; '>

                <?

                if (strstr($list[$i][wr_option], "secret")) echo "<span style='color:#ff6600;'>*</span> ";

                $str = $list[$i][content];

                if (strstr($list[$i][wr_option], "secret"))

                    $str = "<span class='small' style='color:#ff6600;'>$str</span>";</p>

<p>                $str = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $str);

                // FLASH XSS 공격에 의해 주석 처리 - 110406

                //$str = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp)\:\/\/([^[:space:]]+)\.(swf)\".*\<\/a\>\]/i", "<script>doc_write(flash_movie('$1://$2.$3'));</script>", $str);

                $str = preg_replace("/\[\<a\s*href\=\"(http|https|ftp)\:\/\/([^[:space:]]+)\.(gif|png|jpg|jpeg|bmp)\"\s*[^\>]*\>[^\s]*\<\/a\>\]/i", "<img src='$1://$2.$3' id='target_resize_image[]' onclick='image_window(this);' border='0'>", $str);

                echo $str;

                ?>

                </div>

                <? if ($list[$i][trackback]) { echo "<p>".$list[$i][trackback]."</p>"; } ?>

                <span id='edit_<?=$comment_id?>' style='display:none;'></span><!-- 수정 -->

                <span id='reply_<?=$comment_id?>' style='display:none;'></span><!-- 답변 -->

                </div>

                <input type=hidden id='secret_comment_<?=$comment_id?>' value="<?=strstr($list[$i][wr_option],"secret")?>">

                <textarea id='save_comment_<?=$comment_id?>' style='display:none;'><?=get_text($list[$i][content1], 0)?></textarea></td>

        </tr>

        <tr>

            <td height=5 colspan=3></td>

        </tr>

        </table></p>

<p>    </td>

</tr>

</table>

<? } ?>

</div>

<!-- 코멘트 리스트 --></p>

<p><? if ($is_comment_write) { ?>

<!-- 코멘트 입력 -->

<div id=comment_write style="display:none;">

<table width=100% border=0 cellpadding=1 cellspacing=0 bgcolor="#dddddd"><tr><td>

<form name="fviewcomment" method="post" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" autocomplete="off" style="margin:0px;">

<input type=hidden name=w           id=w value='c'>

<input type=hidden name=bo_table    value='<?=$bo_table?>'>

<input type=hidden name=wr_id       value='<?=$wr_id?>'>

<input type=hidden name=comment_id  id='comment_id' value=''>

<input type=hidden name=sca         value='<?=$sca?>' >

<input type=hidden name=sfl         value='<?=$sfl?>' >

<input type=hidden name=stx         value='<?=$stx?>'>

<input type=hidden name=spt         value='<?=$spt?>'>

<input type=hidden name=page        value='<?=$page?>'>

<input type=hidden name=cwin        value='<?=$cwin?>'>

<input type=hidden name=is_good     value=''></p>

<p><table width=100% cellpadding=3 height=156 cellspacing=0 bgcolor="#ffffff" style="border:1px solid #fff; background:url(<?=$board_skin_path?>/img/co_bg.gif) x-repeat;">

<tr>

    <td colspan="2" style="padding:5px 0 0 5px;">

        <span style="cursor: pointer;" onclick="textarea_decrease('wr_content', 8);"><img src="<?=$board_skin_path?>/img/co_btn_up.gif" border='0'></span>

        <span style="cursor: pointer;" onclick="textarea_original('wr_content', 8);"><img src="<?=$board_skin_path?>/img/co_btn_init.gif" border='0'></span>

        <span style="cursor: pointer;" onclick="textarea_increase('wr_content', 8);"><img src="<?=$board_skin_path?>/img/co_btn_down.gif" border='0'></span>

        <? if ($is_guest) { ?>

            이름 <INPUT type=text maxLength=20 size=10 name="wr_name" itemname="이름" required class=ed>

            패스워드 <INPUT type=password maxLength=20 size=10 name="wr_password" itemname="패스워드" required class=ed>

            <? if ($is_guest) { ?>

            <img id='kcaptcha_image' />

            <input title="왼쪽의 글자를 입력하세요." type="input" name="wr_key" size="10" itemname="자동등록방지" required class=ed>

            <?}?>

        <? } ?>

        <input type=checkbox id="wr_secret" name="wr_secret" value="secret">비밀글

        <? if ($comment_min || $comment_max) { ?><span id=char_count></span>글자<?}?>

    </td>

</tr>

<tr>

    <td width=95%>

        <textarea id="wr_content" name="wr_content" rows=8 itemname="내용" required

        <? if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?}?> style='width:100%; word-break:break-all;' class=tx></textarea>

        <? if ($comment_min || $comment_max) { ?><script type="text/javascript"> check_byte('wr_content', 'char_count'); </script><?}?>

    </td>

    <td width=85 align=center>

        <div><input type="image" src="<?=$board_skin_path?>/img/co_btn_write.gif" border=0 accesskey='s'></div>

    </td>

</tr>

</table>

</form>

</td></tr></table>

</div></p>

<p><script type="text/javascript" src="<?="$g4[path]/js/jquery.kcaptcha.js"?>"></script>

<script type="text/javascript">

var save_before = '';

var save_html = document.getElementById('comment_write').innerHTML;</p>

<p>function good_and_write()

{

    var f = document.fviewcomment;

    if (fviewcomment_submit(f)) {

        f.is_good.value = 1;

        f.submit();

    } else {

        f.is_good.value = 0;

    }

}</p>

<p>function fviewcomment_submit(f)

{

    var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자</p>

<p>    f.is_good.value = 0;</p>

<p>    /*

    var s;

    if (s = word_filter_check(document.getElementById('wr_content').value))

    {

        alert("내용에 금지단어('"+s+"')가 포함되어있습니다");

        document.getElementById('wr_content').focus();

        return false;

    }

    */</p>

<p>    var subject = "";

    var content = "";

    $.ajax({

        url: "<?=$board_skin_path?>/ajax.filter.php",

        type: "POST",

        data: {

            "subject": "",

            "content": f.wr_content.value

        },

        dataType: "json",

        async: false,

        cache: false,

        success: function(data, textStatus) {

            subject = data.subject;

            content = data.content;

        }

    });</p>

<p>    if (content) {

        alert("내용에 금지단어('"+content+"')가 포함되어있습니다");

        f.wr_content.focus();

        return false;

    }</p>

<p>    // 양쪽 공백 없애기

    var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자

    document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");

    if (char_min > 0 || char_max > 0)

    {

        check_byte('wr_content', 'char_count');

        var cnt = parseInt(document.getElementById('char_count').innerHTML);

        if (char_min > 0 && char_min > cnt)

        {

            alert("코멘트는 "+char_min+"글자 이상 쓰셔야 합니다.");

            return false;

        } else if (char_max > 0 && char_max < cnt)

        {

            alert("코멘트는 "+char_max+"글자 이하로 쓰셔야 합니다.");

            return false;

        }

    }

    else if (!document.getElementById('wr_content').value)

    {

        alert("코멘트를 입력하여 주십시오.");

        return false;

    }</p>

<p>    if (typeof(f.wr_name) != 'undefined')

    {

        f.wr_name.value = f.wr_name.value.replace(pattern, "");

        if (f.wr_name.value == '')

        {

            alert('이름이 입력되지 않았습니다.');

            f.wr_name.focus();

            return false;

        }

    }</p>

<p>    if (typeof(f.wr_password) != 'undefined')

    {

        f.wr_password.value = f.wr_password.value.replace(pattern, "");

        if (f.wr_password.value == '')

        {

            alert('패스워드가 입력되지 않았습니다.');

            f.wr_password.focus();

            return false;

        }

    }</p>

<p>    if (!check_kcaptcha(f.wr_key)) {

        return false;

    }</p>

<p>    return true;

}</p>

<p>/*

jQuery.fn.extend({

    kcaptcha_load: function() {

        $.ajax({

            type: 'POST',

            url: g4_path+'/'+g4_bbs+'/kcaptcha_session.php',

            cache: false,

            async: false,

            success: function(text) {

                $('#kcaptcha_image')

                    .attr('src', g4_path+'/'+g4_bbs+'/kcaptcha_image.php?t=' + (new Date).getTime())

                    .css('cursor', '')

                    .attr('title', '');

                md5_norobot_key = text;

            }

        });

    }

});

*/</p>

<p>function comment_box(comment_id, work)

{

    var el_id;

    // 코멘트 아이디가 넘어오면 답변, 수정

    if (comment_id)

    {

        if (work == 'c')

            el_id = 'reply_' + comment_id;

        else

            el_id = 'edit_' + comment_id;

    }

    else

        el_id = 'comment_write';</p>

<p>    if (save_before != el_id)

    {

        if (save_before)

        {

            document.getElementById(save_before).style.display = 'none';

            document.getElementById(save_before).innerHTML = '';

        }</p>

<p>        document.getElementById(el_id).style.display = '';

        document.getElementById(el_id).innerHTML = save_html;

        // 코멘트 수정

        if (work == 'cu')

        {

            document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;

            if (typeof char_count != 'undefined')

                check_byte('wr_content', 'char_count');

            if (document.getElementById('secret_comment_'+comment_id).value)

                document.getElementById('wr_secret').checked = true;

            else

                document.getElementById('wr_secret').checked = false;

        }</p>

<p>        document.getElementById('comment_id').value = comment_id;

        document.getElementById('w').value = work;</p>

<p>        save_before = el_id;

    }</p>

<p>    if (typeof(wrestInitialized) != 'undefined')

        wrestInitialized();</p>

<p>    //jQuery(this).kcaptcha_load();

    if (comment_id && work == 'c')

        $.kcaptcha_run();

}</p>

<p>function comment_delete(url)

{

    if (confirm("이 코멘트를 삭제하시겠습니까?")) location.href = url;

}</p>

<p>comment_box('', 'c'); // 코멘트 입력폼이 보이도록 처리하기위해서 추가 (root님)

</script>

<? } ?></p>

<p><? if($cwin==1) { ?></td><tr></table><p align=center><a href="javascript:window.close();"><img src="<?=$board_skin_path?>/img/btn_close.gif" border="0"></a>

<?}?></p>

<p>

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

답변 3개

채택된 답변
+20 포인트
그누위즈

bbs/view_comment.php 파일에서

</p>

<p>// 공백없이 연속 입력한 문자 자르기 (way 보드 참고. way.co.kr)

//$list[$i]['content'] = eregi_replace("[^ \n<>]{130}", "\\0\n", $row['wr_content']);</p>

<p>$list[$i]['content'] = $list[$i]['content1']= '비밀글 입니다.';

if (!strstr($row['wr_option'], 'secret') ||

    $is_admin ||

    ($write['mb_id']==$member['mb_id'] && $member['mb_id']) ||

    ($row['mb_id']==$member['mb_id'] && $member['mb_id'])) {

    $list[$i]['content1'] = $row['wr_content'];

    $list[$i]['content'] = conv_content($row['wr_content'], 0, 'wr_content');

    $list[$i]['content'] = search_font($stx, $list[$i]['content']);

} else {

    $ss_name = 'ss_secret_comment_'.$bo_table.'_'.$list[$i]['wr_id'];</p>

<p>    if(!get_session($ss_name))

        $list[$i]['content'] = '<a href="./password.php?w=sc&amp;bo_table='.$bo_table.'&amp;wr_id='.$list[$i]['wr_id'].$qstr.'" class="s_cmt">댓글내용 확인</a>';

    else {

        $list[$i]['content'] = conv_content($row['wr_content'], 0, 'wr_content');

        $list[$i]['content'] = search_font($stx, $list[$i]['content']);

    }

}</p>

<p>

 

부분을 아래와 같이 ($member['mb_level'] >= 9) 조건문 추가

</p>

<p>// 공백없이 연속 입력한 문자 자르기 (way 보드 참고. way.co.kr)

//$list[$i]['content'] = eregi_replace("[^ \n<>]{130}", "\\0\n", $row['wr_content']);</p>

<p>$list[$i]['content'] = $list[$i]['content1']= '비밀글 입니다.';

if (!strstr($row['wr_option'], 'secret') ||

    $is_admin ||

    ($write['mb_id']==$member['mb_id'] && $member['mb_id']) ||<span style="color:#c0392b;"> ($member['mb_level'] >= 9) ||</span>

    ($row['mb_id']==$member['mb_id'] && $member['mb_id'])) {

    $list[$i]['content1'] = $row['wr_content'];

    $list[$i]['content'] = conv_content($row['wr_content'], 0, 'wr_content');

    $list[$i]['content'] = search_font($stx, $list[$i]['content']);

} else {

    $ss_name = 'ss_secret_comment_'.$bo_table.'_'.$list[$i]['wr_id'];</p>

<p>    if(!get_session($ss_name))

        $list[$i]['content'] = '<a href="./password.php?w=sc&amp;bo_table='.$bo_table.'&amp;wr_id='.$list[$i]['wr_id'].$qstr.'" class="s_cmt">댓글내용 확인</a>';

    else {

        $list[$i]['content'] = conv_content($row['wr_content'], 0, 'wr_content');

        $list[$i]['content'] = search_font($stx, $list[$i]['content']);

    }

}</p>

<p>

테스트 해본 소스는 아닙니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

디자인럽
6년 전
덕분에 잘 되요~^^ 감사합니다!!

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

그누위즈

저기 부분에 보이시네요

 

($write['mb_id']==$member['mb_id'] && $member['mb_id']) ||

->>>>>>>>>>>>>>>>>>>>>>>>>

($write['mb_id']==$member['mb_id'] && $member['mb_id']) || ($member['mb_level'] >= 9) ||

로그인 후 평가할 수 있습니다

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

제 bbs/view_comment.php 소스는

</p>

<p><?

if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가</p>

<p>@include_once("$board_skin_path/view_comment.head.skin.php");</p>

<p>// 자동등록방지

include_once ("./norobot.inc.php");</p>

<p>// 코멘트를 새창으로 여는 경우 세션값이 없으므로 생성한다.

if ($is_admin && !$token)

{

    set_session("ss_delete_token", $token = uniqid(time()));

}</p>

<p>$list = array();</p>

<p>$is_comment_write = false;

if ($member[mb_level] >= $board[bo_comment_level])

    $is_comment_write = true;</p>

<p>// 코멘트 출력

//$sql = " select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 order by wr_comment desc, wr_comment_reply ";

$sql = " select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 order by wr_comment, wr_comment_reply ";

$result = sql_query($sql);

for ($i=0; $row=sql_fetch_array($result); $i++)

{

    $list[$i] = $row;</p>

<p>    //$list[$i][name] = get_sideview($row[mb_id], cut_str($row[wr_name], 20, ''), $row[wr_email], $row[wr_homepage]);</p>

<p>    $tmp_name = get_text(cut_str($row[wr_name], $config[cf_cut_name])); // 설정된 자리수 만큼만 이름 출력

    if ($board[bo_use_sideview])

        $list[$i][name] = get_sideview($row[mb_id], $tmp_name, $row[wr_email], $row[wr_homepage]);

    else

        $list[$i][name] = "<span class='".($row[mb_id]?'member':'guest')."'>$tmp_name</span>";</p>

<p>

   

    // 공백없이 연속 입력한 문자 자르기 (way 보드 참고. way.co.kr)

    //$list[$i][content] = eregi_replace("[^ \n<>]{130}", "<a href="file://\\0\n">\\0\n</a>", $row[wr_content]);</p>

<p>    $list[$i][content] = $list[$i][content1]= "비밀글 입니다.";

    if (!strstr($row[wr_option], "secret") ||

        $is_admin ||

        ($write[mb_id]==$member[mb_id] && $member[mb_id]) ||

        ($row[mb_id]==$member[mb_id] && $member[mb_id])) {

        $list[$i][content1] = $row[wr_content];

        $list[$i][content] = conv_content($row[wr_content], 0, 'wr_content');

        $list[$i][content] = search_font($stx, $list[$i][content]);

    }</p>

<p>    $list[$i][trackback] = url_auto_link($row[wr_trackback]);

    $list[$i][datetime] = substr($row[wr_datetime],2,14);</p>

<p>    // 관리자가 아니라면 중간 IP 주소를 감춘후 보여줍니다.

    $list[$i][ip] = $row[wr_ip];

    if (!$is_admin)

        $list[$i][ip] = preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", "<a href="file://\\1.♡.\\3.\\4">\\1.♡.\\3.\\4</a>", $row[wr_ip]);</p>

<p>    $list[$i][is_reply] = false;

    $list[$i][is_edit] = false;

    $list[$i][is_del]  = false;

    if ($is_comment_write || $is_admin)

    {

        if ($member[mb_id])

        {

            if ($row[mb_id] == $member[mb_id] || $is_admin)

            {

                $list[$i][del_link]  = "./delete_comment.php?bo_table=$bo_table&comment_id=$row[wr_id]&token=$token&cwin=$cwin&page=$page".$qstr;

                $list[$i][is_edit]   = true;

                $list[$i][is_del]    = true;

            }

        }

        else

        {

            if (!$row[mb_id]) {

                $list[$i][del_link] = "./password.php?w=x&bo_table=$bo_table&comment_id=$row[wr_id]&cwin=$cwin&page=$page".$qstr;

                $list[$i][is_del]   = true;

            }

        }</p>

<p>        if (strlen($row[wr_comment_reply]) < 5)

            $list[$i][is_reply] = true;

    }</p>

<p>    // 05.05.22

    // 답변있는 코멘트는 수정, 삭제 불가

    if ($i > 0 && !$is_admin)

    {

        if ($row[wr_comment_reply])

        {

            $tmp_comment_reply = substr($row[wr_comment_reply], 0, strlen($row[wr_comment_reply]) - 1);

            if ($tmp_comment_reply == $list[$i-1][wr_comment_reply])

            {

                $list[$i-1][is_edit] = false;

                $list[$i-1][is_del] = false;

            }

        }

    }

}</p>

<p>//  코멘트수 제한 설정값

if ($is_admin)

{

    $comment_min = $comment_max = 0;

}

else

{

    $comment_min = (int)$board[bo_comment_min];

    $comment_max = (int)$board[bo_comment_max];

}</p>

<p>include_once("$board_skin_path/view_comment.skin.php");</p>

<p>// 필터

//echo "<script type='text/javascript'> var g4_cf_filter = '$config[cf_filter]'; </script>\n";

//echo "<script type='text/javascript' src='$g4[path]/js/filter.js'></script>\n";</p>

<p>if (!$member[mb_id]) // 비회원일 경우에만

    echo "<script type='text/javascript' src='$g4[path]/js/md5.js'></script>\n";</p>

<p>@include_once("$board_skin_path/view_comment.tail.skin.php");

?></p>

<p>

 

인데 말씀해 주신 소스랑 좀 달라서 어디를 수정해야되는지 모르겠어요

죄송하지만 다시 알려주실수 있으실까요?

로그인 후 평가할 수 있습니다

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

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

로그인