웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
제로보드 코멘트 수정 기능 구현!!
2003.01.28 12:13
파일 수정/추가가 필요합니다.
테스트 결과 잘 동작합니다.
우선 스킨에서, view_comment.php - 코멘트 삭제버튼(링크) 앞에 코멘트 수정 링크 추가, modify_comment.php 추가.
(모든 스킨에서 사용 가능하게 하려면 아래처럼 제로보드 폴더의 view.php 수정 필요) --------------------------
if($c_data[ismember]) { // 이부분을 찾아 아래처럼 고쳐주세요
if($c_data[ismember]==$member[no]||$is_admin||$member[level]<=$setup[grant_delete]) {
$a_del="<a onfocus=blur() href='del_comment.php?$href$sort&no=$no&c_no=$c_data[no]'+ '>";
$a_cmod="<a onfocus=blur() href='modify_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
}
else {
$a_del=" <Zeroboard ";
$a_cmod=" <Zeroboard ";
}
}
else {
$a_del="<a onfocus=blur() href='del_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
$a_cmod="<a onfocus=blur() href='modify_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
}
------------------------- 제로보드 폴더에서, _head.php를 수정 -------------------------
/***************************************************************************
* 현재 _head.php를 호출하는 파일이 게시판 관련 파일인지 검사
**************************************************************************/ 이 아래줄을 다음 줄로 교체
$_zb_file_list = array("apply_vote.php","comment_ok.php","modify_comment.php","modify_comment_ok.php","del_comment.php","del_comment_ok.php","delete.php","download.php","list_all.php","view.php","vote.php","write.php","write_ok.php","zboard.php","image_box.php"); // 요걸로 바꿈
------------------------- del_comment.php를 복사, 수정하여 modify_comment.php 생성 -------------------------
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 수정하여 주시기 바랍니다.");
if(!$member) $member=member_info();
/***************************************************************************
* 코멘트 수정 페이지 처리
**************************************************************************/
// 원본글을 가져옴
$s_data=mysql_fetch_array(mysql_query("select * from $t_comment"."_$id where no='$c_no'"));
if($s_data[ismember]||$is_admin||$member[level]<=$setup[grant_delete]) {
if(!$is_admin&&$s_data[ismember]!=$member[no]) Error("수정할 권한이 없습니다");
if ($s_data[ismember]==$member[no]) $name=$member[name];
else $name=$s_data[name];
}
$target="modify_comment_ok.php";
$memo=stripslashes($s_data[memo]);
head();
include $dir."/modify_comment.php";
foot();
include "_foot.php";
?>
-------------------------- comment_ok.php를 복사, 수정하여 modify_comment_ok.php 생성 --------------------------
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 수정하여 주시기 바랍니다.");
if(!$member) $member=member_info();
/***************************************************************************
* 코멘트 수정 진행
**************************************************************************/
// 각종 변수 검사;;
$memo = str_replace("","",$memo);
if(isblank($memo)) Error("내용을 입력하셔야 합니다");
if(!$member[no]) {
if(isblank($name)) Error("이름을 입력하셔야 합니다");
if(isblank($password)) Error("비밀번호를 입력하셔야 합니다");
}
// 필터링;; 관리자가 아닐때;;
if(!$is_admin&&$setup[use_filter]) {
$filter=explode(",",$setup[filter]);
$f_memo=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($memo));
$f_name=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($name));
$f_subject=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($subject));
$f_email=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($email));
$f_homepage=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($homepage));
for($i=0;$i<count($filter);$i++)
if(!isblank($filter[$i])) {
if(eregi($filter[$i],$f_memo)) Error("<b>$filter[$i]</b> 은(는) 등록하기에 적합한 단어가 아닙니다");
if(eregi($filter[$i],$f_name)) Error("<b>$filter[$i]</b> 은(는) 등록하기에 적합한 단어가 아닙니다");
}
}
// 패스워드를 암호화
if($password) {
$temp=mysql_fetch_array(mysql_query("select password('$password')"));
$password=$temp[0];
}
// 원본글을 가져옴
$s_data=mysql_fetch_array(mysql_query("select * from $t_comment"."_$id where no='$c_no'"));
// 회원일때를 확인;;
if(!$is_admin&&$member[level]>$setup[grant_delete]) {
if(!$s_data[ismember]) {
if($s_data[password]!=$password) Error("비밀번호가 올바르지 않습니다");
}
else error("사용 권한이 없습니다");
// 관리자이거나 HTML허용레벨이 낮을때 태그의 금지유무를 체크
if(!$is_admin&&$setup[grant_html]<$member[level]) {
$memo=del_html($memo);// 내용의 HTML 금지;;
}
// 회원등록이 되어 있을때 이름등을 가져옴;;
if($member[no]) {
if($member[no]!=$s_data[ismember]) $name=$s_data[name];
else $name=$member[name];
}
// 각종 변수의 addslashes 시킴
$name=addslashes(del_html($name));
$memo=autolink($memo);
$memo=addslashes($memo);
// 같은 내용이 있는지 검사;;
if(!$is_admin) {
$temp=mysql_num_rows(mysql_query("select count(*) from $t_comment"."_$id where memo='$memo' and no='$max_no[0]'"));
if($temp>0) Error("같은 내용의 글은 등록할수가 없습니다");
}
// 해당글이 있는 지를 검사
$check = mysql_num_rows(mysql_query("select count(*) from $t_comment"."_$id where no = '$c_no'", $connect));
if(!$check) Error("원본 글이 존재하지 않습니다.");
// 코멘트 수정
mysql_query("update $t_comment"."_$id set name='$name',memo='$memo',ismember='$s_data[ismember]',ip='$REMOTE_ADDR',reg_date='$s_data[reg_date]' where no='$c_no'") or error(mysql_error());
@mysql_close($connect);
// 페이지 이동
if($setup[use_alllist]) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
else movepage("view.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
?>
-------------------- view_write_comment.php 를 복사. 수정하여 modify_comment.php 생성 (nzeo_ver4 기준) --------------------
<table border=0 cellspacing=1 cellpadding=1 class=line1 width=<?=$width?>>
<tr>
<td bgcolor=white>
<table border=0 cellspacing=1 cellpadding=8 width=100% height=120 bgcolor=white>
<script>
function check_comment_submit(obj) {
if(obj.memo.value.length<10) {
alert("코멘트는 10자 이상 적어주세요");
obj.memo.focus();
return false;
}
return true;
}
</script>
<form method=post name=write action=<?=$target?> onsubmit="return check_comment_submit(this)"><input type=hidden name=page value=<?=$page?>><input type=hidden name=id value=<?=$id?>><input type=hidden name=no value=<?=$no?>><input type=hidden name=c_no value=<?=$c_no?>><input type=hidden name=select_arrange value=<?=$select_arrange?>><input type=hidden name=desc value=<?=$desc?>><input type=hidden name=page_num value=<?=$page_num?>><input type=hidden name=keyword value="<?=$keyword?>"><input type=hidden name=category value="<?=$category?>"><input type=hidden name=sn value="<?=$sn?>"><input type=hidden name=ss value="<?=$ss?>"><input type=hidden name=sc value="<?=$sc?>"><input type=hidden name=mode value="<?=$mode?>">
<col width=95 align=right style=padding-right:10px></col><col width=></col><col width=95 align=right style=padding-right:10px></col><col width=></col>
<?if(!$member[no]){?>
<tr>
<td class=list0><font class=list_eng><b>이름</b></td>
<td class=list1><font class=list_han><?=$c_name?></font></td>
<?=$hide_c_password_start?>
<td class=list0><font class=list_eng><b>암호</b></td>
<td class=list1><input type=password name=password <?=size(8)?> maxlength=20 class=input></td>
<?=$hide_c_password_end?>
</tr>
<?}?>
<tr>
<td class=list0 onclick="document.write.memo.rows=document.write.memo.rows+4" style=cursor:hand><font class=list_eng><b>짧은글</b><br>▼</td>
<td class=list1 colspan=4>
<table border=0 cellspacing=2 cellpadding=0 width=100% height=100%>
<col width=""></col><col width=100></col>
<tr>
<td width=100% colspan=2><textarea name=memo cols=20 rows=8 class=textarea style=width:100%><?=$memo?></textarea></td>
<td width=100 colspan=2><input type=submit rows=5 class=submit value=' 글쓰기 ' accesskey="s" style=height:100%></td>
</tr>
</table>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
------------------------------------------------
끝 ~_~
테스트 결과 잘 동작합니다.
우선 스킨에서, view_comment.php - 코멘트 삭제버튼(링크) 앞에 코멘트 수정 링크 추가, modify_comment.php 추가.
(모든 스킨에서 사용 가능하게 하려면 아래처럼 제로보드 폴더의 view.php 수정 필요) --------------------------
if($c_data[ismember]) { // 이부분을 찾아 아래처럼 고쳐주세요
if($c_data[ismember]==$member[no]||$is_admin||$member[level]<=$setup[grant_delete]) {
$a_del="<a onfocus=blur() href='del_comment.php?$href$sort&no=$no&c_no=$c_data[no]'+ '>";
$a_cmod="<a onfocus=blur() href='modify_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
}
else {
$a_del=" <Zeroboard ";
$a_cmod=" <Zeroboard ";
}
}
else {
$a_del="<a onfocus=blur() href='del_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
$a_cmod="<a onfocus=blur() href='modify_comment.php?$href$sort&no=$no&c_no=$c_data[no]'>";
}
------------------------- 제로보드 폴더에서, _head.php를 수정 -------------------------
/***************************************************************************
* 현재 _head.php를 호출하는 파일이 게시판 관련 파일인지 검사
**************************************************************************/ 이 아래줄을 다음 줄로 교체
$_zb_file_list = array("apply_vote.php","comment_ok.php","modify_comment.php","modify_comment_ok.php","del_comment.php","del_comment_ok.php","delete.php","download.php","list_all.php","view.php","vote.php","write.php","write_ok.php","zboard.php","image_box.php"); // 요걸로 바꿈
------------------------- del_comment.php를 복사, 수정하여 modify_comment.php 생성 -------------------------
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 수정하여 주시기 바랍니다.");
if(!$member) $member=member_info();
/***************************************************************************
* 코멘트 수정 페이지 처리
**************************************************************************/
// 원본글을 가져옴
$s_data=mysql_fetch_array(mysql_query("select * from $t_comment"."_$id where no='$c_no'"));
if($s_data[ismember]||$is_admin||$member[level]<=$setup[grant_delete]) {
if(!$is_admin&&$s_data[ismember]!=$member[no]) Error("수정할 권한이 없습니다");
if ($s_data[ismember]==$member[no]) $name=$member[name];
else $name=$s_data[name];
}
$target="modify_comment_ok.php";
$memo=stripslashes($s_data[memo]);
head();
include $dir."/modify_comment.php";
foot();
include "_foot.php";
?>
-------------------------- comment_ok.php를 복사, 수정하여 modify_comment_ok.php 생성 --------------------------
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 수정하여 주시기 바랍니다.");
if(!$member) $member=member_info();
/***************************************************************************
* 코멘트 수정 진행
**************************************************************************/
// 각종 변수 검사;;
$memo = str_replace("","",$memo);
if(isblank($memo)) Error("내용을 입력하셔야 합니다");
if(!$member[no]) {
if(isblank($name)) Error("이름을 입력하셔야 합니다");
if(isblank($password)) Error("비밀번호를 입력하셔야 합니다");
}
// 필터링;; 관리자가 아닐때;;
if(!$is_admin&&$setup[use_filter]) {
$filter=explode(",",$setup[filter]);
$f_memo=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($memo));
$f_name=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($name));
$f_subject=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($subject));
$f_email=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($email));
$f_homepage=eregi_replace("([_-./~@?=%&! ]+)","",strip_tags($homepage));
for($i=0;$i<count($filter);$i++)
if(!isblank($filter[$i])) {
if(eregi($filter[$i],$f_memo)) Error("<b>$filter[$i]</b> 은(는) 등록하기에 적합한 단어가 아닙니다");
if(eregi($filter[$i],$f_name)) Error("<b>$filter[$i]</b> 은(는) 등록하기에 적합한 단어가 아닙니다");
}
}
// 패스워드를 암호화
if($password) {
$temp=mysql_fetch_array(mysql_query("select password('$password')"));
$password=$temp[0];
}
// 원본글을 가져옴
$s_data=mysql_fetch_array(mysql_query("select * from $t_comment"."_$id where no='$c_no'"));
// 회원일때를 확인;;
if(!$is_admin&&$member[level]>$setup[grant_delete]) {
if(!$s_data[ismember]) {
if($s_data[password]!=$password) Error("비밀번호가 올바르지 않습니다");
}
else error("사용 권한이 없습니다");
// 관리자이거나 HTML허용레벨이 낮을때 태그의 금지유무를 체크
if(!$is_admin&&$setup[grant_html]<$member[level]) {
$memo=del_html($memo);// 내용의 HTML 금지;;
}
// 회원등록이 되어 있을때 이름등을 가져옴;;
if($member[no]) {
if($member[no]!=$s_data[ismember]) $name=$s_data[name];
else $name=$member[name];
}
// 각종 변수의 addslashes 시킴
$name=addslashes(del_html($name));
$memo=autolink($memo);
$memo=addslashes($memo);
// 같은 내용이 있는지 검사;;
if(!$is_admin) {
$temp=mysql_num_rows(mysql_query("select count(*) from $t_comment"."_$id where memo='$memo' and no='$max_no[0]'"));
if($temp>0) Error("같은 내용의 글은 등록할수가 없습니다");
}
// 해당글이 있는 지를 검사
$check = mysql_num_rows(mysql_query("select count(*) from $t_comment"."_$id where no = '$c_no'", $connect));
if(!$check) Error("원본 글이 존재하지 않습니다.");
// 코멘트 수정
mysql_query("update $t_comment"."_$id set name='$name',memo='$memo',ismember='$s_data[ismember]',ip='$REMOTE_ADDR',reg_date='$s_data[reg_date]' where no='$c_no'") or error(mysql_error());
@mysql_close($connect);
// 페이지 이동
if($setup[use_alllist]) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
else movepage("view.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
?>
-------------------- view_write_comment.php 를 복사. 수정하여 modify_comment.php 생성 (nzeo_ver4 기준) --------------------
<table border=0 cellspacing=1 cellpadding=1 class=line1 width=<?=$width?>>
<tr>
<td bgcolor=white>
<table border=0 cellspacing=1 cellpadding=8 width=100% height=120 bgcolor=white>
<script>
function check_comment_submit(obj) {
if(obj.memo.value.length<10) {
alert("코멘트는 10자 이상 적어주세요");
obj.memo.focus();
return false;
}
return true;
}
</script>
<form method=post name=write action=<?=$target?> onsubmit="return check_comment_submit(this)"><input type=hidden name=page value=<?=$page?>><input type=hidden name=id value=<?=$id?>><input type=hidden name=no value=<?=$no?>><input type=hidden name=c_no value=<?=$c_no?>><input type=hidden name=select_arrange value=<?=$select_arrange?>><input type=hidden name=desc value=<?=$desc?>><input type=hidden name=page_num value=<?=$page_num?>><input type=hidden name=keyword value="<?=$keyword?>"><input type=hidden name=category value="<?=$category?>"><input type=hidden name=sn value="<?=$sn?>"><input type=hidden name=ss value="<?=$ss?>"><input type=hidden name=sc value="<?=$sc?>"><input type=hidden name=mode value="<?=$mode?>">
<col width=95 align=right style=padding-right:10px></col><col width=></col><col width=95 align=right style=padding-right:10px></col><col width=></col>
<?if(!$member[no]){?>
<tr>
<td class=list0><font class=list_eng><b>이름</b></td>
<td class=list1><font class=list_han><?=$c_name?></font></td>
<?=$hide_c_password_start?>
<td class=list0><font class=list_eng><b>암호</b></td>
<td class=list1><input type=password name=password <?=size(8)?> maxlength=20 class=input></td>
<?=$hide_c_password_end?>
</tr>
<?}?>
<tr>
<td class=list0 onclick="document.write.memo.rows=document.write.memo.rows+4" style=cursor:hand><font class=list_eng><b>짧은글</b><br>▼</td>
<td class=list1 colspan=4>
<table border=0 cellspacing=2 cellpadding=0 width=100% height=100%>
<col width=""></col><col width=100></col>
<tr>
<td width=100% colspan=2><textarea name=memo cols=20 rows=8 class=textarea style=width:100%><?=$memo?></textarea></td>
<td width=100 colspan=2><input type=submit rows=5 class=submit value=' 글쓰기 ' accesskey="s" style=height:100%></td>
</tr>
</table>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
------------------------------------------------
끝 ~_~
댓글 13
-
박기상
2003.04.05 02:28
-
위대한위선자
2003.01.29 02:06
다음에는 이렇게 한 번 해보시지요.
코멘트를 게시판처럼 만들기로 하는 방법에 대해서요.
저의 경우 기존의 코멘트를 해당내용에 대한 짧은 의견 남기기라는 것으로 만들고
아래에 코멘트 항목에 게시물번호 / 제목 / 날짜 까지 나오게 하고 전체 코멘트 내용중에서
5개까지만 제목이 나오게 하고 나머지는 전체 의견보기를 누르면 나머지를 볼 수 있도록 하였습니다.
모든 것이 다 되었는데 제목을 누르면 다시 원래의 view.php에 이 코멘트내용만 나오도록 하는 부분이 안되어서 포기했던 적이 있습니다.
이러한 방법은 해결책이 없을까요 ? -
MYMINT
2003.01.28 23:28
음.. 워드랩이 안되네 -ㅁ-;; -
靑色糖™
2003.01.28 14:02
기대됩니다! -
세죠위그이
2003.01.28 16:20
코..코멘트 수정..! -ㅁ-;; -
MYMINT
2003.01.29 20:35
그런건 차라리 코멘트 없이 답글을 쫙 보여주는걸로 만드는게 더 낫겠네요 -
MYMINT
2003.01.29 20:35
네이버 지식인처럼 말인가요? -
위대한위선자
2003.01.30 12:44
오마이뉴스나 프레시안처럼 코멘트의 형식을 좀 바꿀 수는 없는 것인지요 -
MYMINT
2003.01.30 13:03
디비수정+파일수정
어떻게 돌아가는지 이해하실 수 있다면 가능합니다 -
위대한위선자
2003.01.31 02:12
한 번 만들어 주실 수 없는지요.
필드를 추가하거나 또는 다른 방법으로든지.
여기에 님께서 작성하신 수정의 방법도 추가하면 참 좋은 방법이 아닌가 생각됩니다.
짧은 글 남기기가 너무 많은 경우 글이 너무 길어지는 단점도 없어질 것 같기고 하고...
제가 시도하다가 실패를 해서 부탁을 드리는 것입니다.
기다려 보겠습니다. 꾸벅 ~~~~ -
김형국
2003.04.13 00:34
시간 관련 부분이 빠진듯 하네요.
시간이 1970년대로 나온다는....
modify_comment_ok.php 에 추가해주세요
$reg_date=time(); // 현재의 시간구함;;
$parent=$no; -
정낙훈(xynex)
2003.04.26 05:22
박기상님 팁 공유 좀 부탁드리겠습니다^^; -
시클라멘
2003.11.14 13:32
비회원이 코멘트를 수정할 때 이름을 입력하라는 에러 해결입니다.
php의 p자도 모르지만 다른 소스와 비교하다 알게됐습니다. -ㅁ-;;
미흡하나마; 알려드릴게요. 간단합니다. ^^
--------------------------------------------------------------
'view_write_comment.php 를 복사. 수정하여 modify_comment.php 생성 (nzeo_ver4 기준)'을 작업하는 과정에서
<td class=list1><font class=list_han><?=$c_name?></font></td>
위 부분을 아래와 같이 바꿉니다.
<td class=list1><font class=list_han><?=$c_name?></font><input type=text name=name <?=size(8)?> maxlength=20 class=input></td>
그러면 이름까지 수정할 수 있는 모드가 되어 에러가 잡히게 됩니다.
단지 회원이 아닌사람이 수정할때 비밀번호를 넣지 않으면 회원이름을 입력하라는 메세지가 나오지만 이건 약간의 수정을 하면 되지요..
어쨌든 굉*장*한 도움 받았습니다. 정말 감사합니다.