게시판 view_comment.skin.php 에 파일 업로그 만들 수 있나요?

게시판 view_comment.skin.php 에 파일 업로그 만들 수 있나요?

QA

게시판 view_comment.skin.php 에 파일 업로그 만들 수 있나요?

본문

게시판 view_comment.skin.php 에 파일 업로그 만들 수 있나요?

감사합니다

이 질문에 댓글 쓰기 :

답변 3

참고를 한번 해보시는게 어떠실지요..

 

view_comment.skin.php

 

<?php

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

?>

 

<div class="view-comment-form">

<form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">

<input type="hidden" name="w" value="c">

<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">

<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">

<input type="hidden" name="comment_id" value="<?php echo $c_id ?>">

<input type="hidden" name="sca" value="<?php echo $sca ?>">

<input type="hidden" name="sfl" value="<?php echo $sfl ?>">

<input type="hidden" name="stx" value="<?php echo $stx ?>">

<input type="hidden" name="spt" value="<?php echo $spt ?>">

<input type="hidden" name="page" value="<?php echo $page ?>">

<input type="hidden" name="is_good" value="">

 

<div class="comment-write">

<?php if ($is_guest) { ?>

<div class="comment-write-input">

<label for="wr_name">이름</label>

<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="form-control required" size="25" placeholder="이름">

</div>

<div class="comment-write-input">

<label for="wr_password">비밀번호</label>

<input type="password" name="wr_password" id="wr_password" required class="form-control required" size="25" placeholder="비밀번호">

</div>

<?php } ?>

<div class="comment-write-content">

<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용"

<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>

<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>

</div>

 

<!-- 파일 첨부 영역 추가 -->

<div class="comment-file-upload">

<div class="file-upload-group">

<label for="bf_file">파일 첨부</label>

<input type="file" name="bf_file[]" id="bf_file" class="form-control">

</div>

<div class="file-desc">

<span class="text-muted">첨부파일은 최대 1개까지 가능합니다. (용량 제한: 2MB)</span>

</div>

</div>

 

<div class="comment-write-btn">

<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>

</div>

</div>

</form>

</div>

 

<script>

function fviewcomment_submit(f)

{

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

 

f.is_good.value = 0;

 

var subject = "";

var content = "";

$.ajax({

url: g5_bbs_url+"/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;

}

});

 

if (content) {

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

f.wr_content.focus();

return false;

}

 

// 양쪽 공백 없애기

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

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;

}

 

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;

}

}

 

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;

}

}

 

// 파일 용량 체크

if (f.bf_file) {

var file = f.bf_file.files[0];

if (file && file.size > 2097152) { // 2MB = 2097152 bytes

alert('첨부파일 용량이 2MB를 초과했습니다.');

return false;

}

}

 

return true;

}

 

// 댓글 삭제

function comment_delete()

{

return confirm("이 댓글을 삭제하시겠습니까?");

}

</script>

 

<!-- 댓글 스타일 -->

<style>

.view-comment-form {

margin: 20px 0;

padding: 20px;

background: #f8f9fa;

border-radius: 5px;

}

 

.comment-write-input {

margin-bottom: 15px;

}

 

.comment-write-input label {

display: block;

margin-bottom: 5px;

font-weight: bold;

}

 

.comment-write-input input {

width: 100%;

padding: 8px;

border: 1px solid #ddd;

border-radius: 4px;

}

 

.comment-write-content textarea {

width: 100%;

min-height: 100px;

padding: 10px;

border: 1px solid #ddd;

border-radius: 4px;

resize: vertical;

}

 

.comment-file-upload {

margin: 15px 0;

padding: 10px;

background: #fff;

border: 1px solid #ddd;

border-radius: 4px;

}

 

.file-upload-group {

margin-bottom: 10px;

}

 

.file-upload-group label {

display: block;

margin-bottom: 5px;

font-weight: bold;

}

 

.file-desc {

font-size: 12px;

color: #666;

}

 

.btn_submit {

padding: 10px 20px;

background: #007bff;

color: #fff;

border: none;

border-radius: 4px;

cursor: pointer;

}

 

.btn_submit:hover {

background: #0056b3;

}

</style>

 

 

write_comment_update.php

 

<?php

include_once('./_common.php');

include_once(G5_LIB_PATH.'/mailer.lib.php');

 

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

 

// 댓글 권한 체크

check_comment_token();

 

$w = isset($_POST['w']) ? clean_xss_tags($_POST['w']) : '';

$bo_table = isset($_POST['bo_table']) ? clean_xss_tags($_POST['bo_table']) : '';

$wr_id = isset($_POST['wr_id']) ? (int)$_POST['wr_id'] : 0;

$comment_id = isset($_POST['comment_id']) ? (int)$_POST['comment_id'] : 0;

 

// 파일 업로드 설정

$upload_max_filesize = ini_get('upload_max_filesize');

if (empty($upload_max_filesize)) {

$upload_max_filesize = '2M';

}

 

$upload_max_filesize = return_bytes($upload_max_filesize);

$upload_max_filesize = min($upload_max_filesize, 2097152); // 2MB로 제한

 

// 디렉토리가 없다면 생성

$upload_dir = G5_DATA_PATH.'/file/'.$bo_table;

if (!is_dir($upload_dir)) {

($upload_dir, G5_DIR_PERMISSION);

@chmod($upload_dir, G5_DIR_PERMISSION);

}

 

$chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));

 

// 파일 업로드 처리

$file_upload_msg = '';

$bf_file = array();

$comment_file = array();

 

if (isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) {

for ($i=0; $i<count($_FILES['bf_file']['name']); $i++) {

$upload = array();

$upload['file'] = '';

$upload['source'] = '';

$upload['filesize'] = 0;

$upload['image'] = array();

$upload['image'][0] = 0;

$upload['image'][1] = 0;

$upload['image'][2] = 0;

$upload['fileurl'] = '';

$upload['thumburl'] = '';

$upload['storage'] = '';

 

$tmp_file = $_FILES['bf_file']['tmp_name'][$i];

$filesize = $_FILES['bf_file']['size'][$i];

$filename = $_FILES['bf_file']['name'][$i];

$filename = get_safe_filename($filename);

 

if (!is_uploaded_file($tmp_file)) {

continue;

}

 

if ($filesize > $upload_max_filesize) {

$file_upload_msg .= '\"'.$filename.'\" 파일의 용량이 서버에 설정된 값을 초과하여 업로드 할 수 없습니다.\\n';

continue;

}

 

$timg = @getimagesize($tmp_file);

if (preg_match("/\.({$config['cf_image_extension']})$/i", $filename) || !empty($timg)) {

if ($timg[2] < 1 || $timg[2] > 16) {

continue;

}

}

 

$upload['image'] = $timg;

 

// 프로그램 원래 파일명

$upload['source'] = $filename;

$upload['filesize'] = $filesize;

 

// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함

$filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc|phar)/i", "$0-x", $filename);

 

// 접미사를 붙인 파일명

$upload['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr(md5(uniqid($filename)), 0, 8).'_'.replace_filename($filename);

 

$dest_file = $upload_dir.'/'.$upload['file'];

 

// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.

$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['bf_file']['error'][$i]);

 

// 올라간 파일의 퍼미션을 변경합니다.

chmod($dest_file, G5_FILE_PERMISSION);

 

$upload['fileurl'] = G5_DATA_URL.'/file/'.$bo_table.'/'.$upload['file'];

$comment_file[] = $upload;

}

}

 

if($w == 'c') {

$wr = get_write($write_table, $wr_id);

if (!$wr['wr_id']) {

alert("글이 존재하지 않습니다.\\n글이 삭제되었거나 이동하였을 수 있습니다.");

}

 

$tmp_comment = $comment_id;

 

if ($is_admin == 'super') // 최고관리자 통과

;

else if ($is_admin == 'group') { // 그룹관리자

$mb = get_member($write['mb_id']);

if ($member['mb_id'] != $group['gr_admin']) // 자신이 관리하는 그룹인가?

alert('자신이 관리하는 그룹의 게시판이 아니므로 댓글을 달 수 없습니다.');

} else if ($is_admin == 'board') { // 게시판관리자이면

$mb = get_member($write['mb_id']);

if ($member['mb_id'] != $board['bo_admin']) // 자신이 관리하는 게시판인가?

alert('자신이 관리하는 게시판이 아니므로 댓글을 달 수 없습니다.');

}

 

if (!$is_admin && !$board['bo_use_comment'])

alert('이 게시판은 댓글을 사용하지 않습니다.');

 

// 댓글 답변

if ($comment_id) {

$reply_array = get_write($write_table, $comment_id);

if (!$reply_array['wr_id'])

alert('답변할 댓글이 없습니다.\\n\\n답변하는 동안 댓글이 삭제되었을 수 있습니다.');

 

if($wr['wr_parent'] != $reply_array['wr_parent'])

alert('댓글을 등록할 수 없습니다.');

 

$tmp_comment = $reply_array['wr_id'];

}

 

$sql = " select max(wr_comment_reply) as reply from {$write_table}

where wr_parent = '$wr_id' and wr_comment = '$tmp_comment' and wr_is_comment = 1 ";

$row = sql_fetch($sql);

if ($row['reply']) {

$reply = $row['reply'] + 1;

if ($reply > 99)

alert('더 이상 답변하실 수 없습니다.\\n\\n답변은 99번까지만 가능합니다.');

$wr_comment_reply = $reply;

}

else {

$wr_comment_reply = '';

}

 

// 댓글 입력

$sql = " insert into $write_table

set wr_parent = '$wr_id',

wr_is_comment = 1,

wr_comment = '$tmp_comment',

wr_comment_reply = '$wr_comment_reply',

wr_subject = '',

wr_content = '$wr_content',

mb_id = '$member[mb_id]',

wr_password = '$wr_password',

wr_name = '$wr_name',

wr_email = '$wr_email',

wr_homepage = '$wr_homepage',

wr_datetime = '".G5_TIME_YMDHIS."',

wr_last = '',

wr_ip = '{$_SERVER['REMOTE_ADDR']}',

wr_1 = '$wr_1',

wr_2 = '$wr_2',

wr_3 = '$wr_3',

wr_4 = '$wr_4',

wr_5 = '$wr_5',

wr_6 = '$wr_6',

wr_7 = '$wr_7',

wr_8 = '$wr_8',

wr_9 = '$wr_9',

wr_10 = '$wr_10' ";

sql_query($sql);

 

$comment_id = sql_insert_id();

 

// 파일 정보 DB에 입력

if($comment_file) {

foreach($comment_file as $cf) {

$sql = " insert into {$g5['board_file_table']}

set bo_table = '$bo_table',

wr_id = '$comment_id',

bf_no = '0',

bf_source = '{$cf['source']}',

bf_file = '{$cf['file']}',

bf_content = '',

bf_fileurl = '{$cf['fileurl']}',

bf_thumburl = '{$cf['thumburl']}',

bf_storage = '{$cf['storage']}',

bf_download = 0,

bf_filesize = '{$cf['filesize']}',

bf_width = '{$cf['image'][0]}',

bf_height = '{$cf['image'][1]}',

bf_type = '{$cf['image'][2]}',

bf_datetime = '".G5_TIME_YMDHIS."' ";

sql_query($sql);

}

}

 

// 원글에 댓글수 증가

sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' ");

 

// 새글 INSERT

sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '$bo_table', '$comment_id', '$wr_id', '".G5_TIME_YMDHIS."', '{$member['mb_id']}' ) ");

 

// 댓글 1 증가

sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' ");

 

// 메일발송 사용

if ($config['cf_email_use'] && $board['bo_use_email']) {

// 관리자의 정보를 얻고

$super_admin = get_admin('super');

$group_admin = get_admin('group');

$board_admin = get_admin('board');

 

$wr_subject = get_text(stripslashes($wr['wr_subject']));

$wr_content = nl2br(get_text(stripslashes("원글\n{$wr['wr_subject']}\n\n\n댓글\n$wr_content")));

 

$warr = array( ''=>'입력', 'u'=>'수정', 'r'=>'답변', 'c'=>'댓글 ', 'cu'=>'댓글 수정' );

$str = $warr[$w];

 

$subject = '['.$config['cf_title'].'] '.$board['bo_subject'].' 게시판에 '.$str.'글이 올라왔습니다.';

$link_url = get_pretty_url($bo_table, $wr_id, $qstr."#c_".$comment_id);

 

include_once(G5_LIB_PATH.'/mailer.lib.php');

 

ob_start();

include_once ('./write_update_mail.php');

$content = ob_get_contents();

ob_end_clean();

 

$array_email = array();

// 게시판관리자에게 보내는 메일

if ($config['cf_email_wr_board_admin']) $array_email[] = $board_admin['mb_email'];

// 게시판그룹관리자에게 보내는 메일

if ($config['cf_email_wr_group_admin']) $array_email[] = $group_admin['mb_email'];

// 최고관리자에게 보내는 메일

if ($config['cf_email_wr_super_admin']) $array_email[] = $super_admin['mb_email'];

 

// 원글게시자에게 보내는 메일

if ($config['cf_email_wr_write']) $array_email[] = $wr['wr_email'];

 

// 중복된 메일 주소는 제거

$unique_email = array_unique($array_email);

$unique_email = array_values($unique_email);

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

mailer($wr_name, $wr_email, $unique_email[$i], $subject, $content, 1);

}

}

}

 

// 사용자 코드 실행

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

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

 

delete_cache_latest($bo_table);

 

if ($file_upload_msg) {

alert($file_upload_msg, get_pretty_url($bo_table, $wr_id, $qstr.'#c_'.$comment_id));

} else {

goto_url(get_pretty_url($bo_table, $wr_id, $qstr.'#c_'.$comment_id));

}

?>

답변을 작성하시기 전에 로그인 해주세요.
전체 85
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT