[답사기 스킨]테이블때문에 머리가 터집니다;;; 정보
그누보드 [답사기 스킨]테이블때문에 머리가 터집니다;;;본문
일전에도 질문 드렸었는데요...
지금 사용중인 갤러리 스킨은 '치에'님께서 답사기 스킨을 수정하신 것으로 사용중입니다.
이 스킨은 아시다시피, 별도의 테이블을 자동으로 만들고, 그곳에 wr_id와 wf_id, 그리고 각 사진별
설명을 적을 수 있는 필드인 wf_cont가 있습니다 .이 세 개중에 wr_id와 wf_id의 조합을 이용해
파일이름을 만들어 data/file 폴더에 저장하는 것 까지는 알겟습니다..... (이거 하나 알아내는데도 거의 죽다살았어요..ㅜㅜ)
암튼... 근데 문제는 게시판 리스트에서 게시물을 선택한 후 복사 혹은 이동을 하면, 기본적으로 그누보드에서
제공하는 필드에 담겼던 사진 두 장은 정상적으로 이동이 되는데. 나머지 사진들.. 즉, 별도의 추가 테이블(file_table)을 이용한 00055_000.jpg, 00055_001.jpg, 00055_002.jpg 등의 파일들은 복사되어 저장될 게시판에 복사가 되질
않고 있습니다.....
전에 제가 질문을 잘못드려 wr_1~wr_5의 기본적으로 제공하는 추가필드를 이용한 줄 알았는데,
오늘 찬찬히 살펴보니 아예 새로운 테이블을 만들어서 사진을 저장하더군요.....
어찌하면 되겠습니까... 초보자라서 소스분석을 나름대로 해보고 sql 쿼리문도 작성해서 해봤는데 영 안되는군요;;
도움 부탁 드리며.. 현재 사용중인 gbupdate.skin.php와 gbform.skin.php를 아래에 올려보겠습니다...
스킨의 원본 그대로 입니다.
====================================================================================================
gbupdate.skin.php 소스내용
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include "$board_skin/config.skin.php";
$msg = "";
for ($i=count($_POST["wf_cont"])-1; $i>=0; $i--)
{
if ($_POST[wf_id_del][$i])
{
$file_name = get_thumb_filename($wr_id, $i);
@unlink("./data/file/$bo_table/${file_name}.jpg");
$sql = " delete from $file_table where wr_id = '$wr_id' and wf_id = '$i' ";
sql_query($sql);
continue;
}
$file_name = get_thumb_filename($wr_id, $i);
if ($_FILES["wf_file"][error][$i] == 0 && $_FILES["wf_file"][size][$i] <= ($file_size * 1024))
{
$src_file = $_FILES["wf_file"][tmp_name][$i];
$dst_file = $image = "./data/file/$bo_table/$file_name.jpg";
move_uploaded_file($src_file, $dst_file);
$size = getimagesize($image);
$src = imagecreatefromjpeg($image);
// 이미지 높이 비율
$rate = $size[1] / $size[0];
// 작은이미지의 높이
$simg_height = (int)($simg_width * $rate);
// 이미지가 jpg 라면
if ($src)
{
// 이미지(소) 생성
$dst = imagecreatetruecolor($simg_width, $simg_height);
// 1.00.05 gd 버전에 따라
if (function_exists("imagecopyresampled")) {
imagecopyresampled($dst, $src, 0, 0, 0, 0, $simg_width, $simg_height, $size[0], $size[1]);
} else {
// 1.00.02 imagecopyresized -> imagecopyresampled 로 교체
imagecopyresized($dst, $src, 0, 0, 0, 0, $simg_width, $simg_height, $size[0], $size[1]);
}
// imagejpeg($dst, "./data/file/$bo_table/{$file_name}.jpg", $image_quality); // 주석 다니깐 월레 크기로 파일로..
}
}
else if ($_FILES["wf_file"][size][$i] > ($file_size * 1024))
{
$msg = "용량이 {$file_size}KB 이상되는 이미지 파일은 업로드 되지 않습니다.\\n\\n만약, 이미지가 업로드 되지 않았다면 용량이 초과한 경우일 겁니다.";
}
$file = "./data/file/$bo_table/{$file_name}.jpg";
if ($_FILES["wf_file"][error][$i] == 0 || $_POST[wf_cont][$i] || file_exists($file))
{
$sql = " insert $file_table
set wr_id = '$wr_id',
wf_id = '$i',
wf_cont = '{$_POST[wf_cont][$i]}' ";
$result = @mysql_query($sql);
if (!$result)
{
$sql = " update $file_table
set wf_cont = '{$_POST[wf_cont][$i]}'
where wr_id = '$wr_id'
and wf_id = '$i' ";
@mysql_query($sql);
}
}
else
{
$sql = " delete from $file_table where wr_id = '$wr_id' and wf_id = '$i' ";
@mysql_query($sql);
}
}
if ($msg)
echo "<script> alert('$msg'); </script>";
//print_r2($_FILES); exit;
?>
============================================================================================
gbform.skin.php 소스 내용
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include "$board_skin/config.skin.php";
// 테이블 자동 생성
$sql = " CREATE TABLE $file_table (
wr_id int(11) NOT NULL default '0',
wf_id tinyint(4) NOT NULL default '0',
wf_cont text NOT NULL,
PRIMARY KEY (wr_id,wf_id)
) TYPE=MyISAM ";
@mysql_query($sql);
if (!$skin_no) $skin_no = "01";
?>
<link rel='stylesheet' href='<?=$board_skin?>/style.css' type='text/css'>
<table width='700' align=center border=0 cellpadding=0 cellspacing=0><tr><td>
<form name=fgbform method=post action='./?doc=bbs/gbupdate.php'
enctype='multipart/form-data'
onsubmit='return fgbform_check(this);'>
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=bo_table value='<?=$bo_table?>'>
<input type=hidden name=wr_id value='<?=$wr_id?>'>
<input type=hidden name=sselect value='<?=$sselect?>'>
<input type=hidden name=stext value='<?=$stext?>'>
<input type=hidden name=section value='<?=$section?>'>
<input type=hidden name=ssort value='<?=$ssort?>'>
<input type=hidden name=sorder value='<?=$sorder?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=wr_recv_email value='<?=$recv_email?>'>
<input type=hidden name=wr_content value='.'>
<?
if ($w == "u")
$title_img = "title_edit.gif";
else if ($w == "r") {
$title_img = "title_reply.gif";
// 텍스트일 경우 원글을 보여준다.
if ($write[wr_html] == true)
$content = ">\n> " . preg_replace("/\n/", "\n> ", get_text($write[wr_content], 0)) . "\n> \n\n";
} else
$title_img = "title_write.gif";
?>
<TABLE BORDER="0"><TR><TD></TD></TR></TABLE>
<table width='100%' cellpadding=0 cellspacing=0 bgcolor=#FFFFFF border=0>
<colgroup width=80>
<colgroup width=''>
<tr><td colspan=3 class=line></td></tr>
<tr><td colspan=3 class=ct> <B>새로운 사진 등록하기</B></td></tr>
<? if ($is_name) { ?><tr><td height=30> <span class=tb>N</span>ame</td><td><input type=text name='wr_name' size=15 maxlength=20 required itemname='이름' value='<?=$name?>' class=is></td>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_passwd) { ?><tr><td height=30> <span class=tb>P</span>assword</td><td><input type=password name='wr_passwd' size=15 maxlength=20 <?=$passwd_required?> itemname='비밀번호' class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_email) { ?><tr><td height=30> <span class=tb>E</span>-mail</td><td><input type=text name='wr_email' maxlength=100 email itemname='E-MAIL' value='<?=$email?>' class=is size=45 class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_homepage) { ?><tr><td height=30> <span class=tb>H</span>omepage</td><td><input type=text name='wr_homepage' itemname='홈페이지' value='<?=$homepage?>' class=is size=45 class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_category) { ?><tr><td height=30> <span class=tb>C</span>ategory</td><td><select name=ca_id class=is required itemname='분류'><option value=''>선택하세요<?=$category_option?></select></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<tr>
<td height=30> <span class=tb>T</span>itle</td>
<td><input type=text name='wr_subject' required itemname='제목' value='<?=$subject?>' class=is size=40>
<? if ($is_notice) { ?><input type=checkbox name=wr_notice value='-1' <?=$notice_checked?>>공지 <? } ?>
<? if ($is_secret) { ?><input type=checkbox name=wr_secret value='1' <?=$secret_checked?>>비밀글 <? } ?>
<td>
</tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<script language="JavaScript">
var input_idx = 0;
var input_max = 30;
function preview_image(event, idx)
{
if(event.srcElement.value.match(/(.jpg|.jpeg)$/i))
{
document.images["preview["+idx+"]"].src = "file://" + event.srcElement.value;
document.images["preview["+idx+"]"].style.display = "";
}
else
document.images["preview["+idx+"]"].style.display = "none";
}
function AddFile(add_idx)
{
var objTbl;
if (document.getElementById) {
objTbl = document.getElementById("tblAttFiles");
} else {
objTbl = document.all["tblAttFiles"];
}
var objRow;
var objCell;
if (input_idx+add_idx > input_max)
{
alert(input_max + "개 이하만 입력 가능합니다.");
return false;
}
var bgcolor;
for (var i=input_idx; i<input_idx+add_idx; i++)
{
objRow = objTbl.insertRow(i);
objCell = objRow.insertCell(0);
if (i%2==0)
bgcolor = '#FAFAFA';
else
bgcolor = '#FFF2F3';
objCell.innerHTML =
"<table width=100% cellpadding=2 bgcolor='"+bgcolor+"'>\n" +
<? if ($w == "u") { ?>
"<tr><td><font color=crimson><b>"+(i+1)+".</b></font> <input type=checkbox name=\"wf_id_del["+i+"]\" value='1'>삭제</td></tr>\n" +
<? } else { ?>
"<tr><td><font color=crimson><b>"+(i+1)+".</b></font></td></tr>\n" +
<? } ?>
"<tr><td align=center><img id=\"preview["+i+"]\" style=\"width:300px; display:none;\" border=\"0\"></td></tr>\n" +
"<tr><td><span class=tb>P</span>hoto : <input type=file name=\"wf_file["+i+"]\" size=31 class=is onChange=\"preview_image(event, "+i+")\"></td></tr>\n" +
"<tr><td valign=top><span class=tb>M</span>emo : <input type=text name=\"wf_cont["+i+"]\" class=is size=46></td></tr>\n" +
"</table>\n";
}
//document.recalc();
input_idx += add_idx;
}
</script>
<? if ($is_upload) { ?>
<tr>
<td height=30> <span class=tb>대표사진</span> #1</td>
<td><input type=file name='wr_file1' itemname='파일 #1' class=is size=40>
<?=$file[1][delete]?>
<br> ※ <?=$upload_max_filesize?> 이하만 업로드 가능
</td>
</tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<? } ?>
<tr>
<td> <span class=tb>M</span>emo1</td>
<td><textarea name='wr_1' style='word-break:break-all;' rows=5 cols=54 itemname='내용' class='textarea lh'><?=$write[wr_1]?></textarea></td>
</tr>
<tr><td colspan=2 height=4></td></tr>
<tr>
<td height=30> <span class=tb>C</span>ontents</td>
<td>
<span class=lh style="color:#FF6600;">
이미지 파일은 jpg 만 가능합니다.
<br>이미지 파일의 용량은 한개당 <?=nf($file_size)?>KB 이하만 가능합니다.
<br>순서대로 입력해 주시고 비어있는곳은 그냥 놔두신 후 저장하시면 됩니다.
</span>
<table id="tblAttFiles"></table><br>
<input type=button value="1개 추가" onclick="AddFile(1)">
<input type=button value="5개 추가" onclick="AddFile(5)">
<input type=button value="10개 추가" onclick="AddFile(10)">
</td>
</tr>
<tr><td colspan=2 height=4></td></tr>
<tr>
<td> <span class=tb>M</span>emo2</td>
<td><textarea name='wr_2' style='word-break:break-all;' rows=5 cols=54 itemname='내용' class='textarea lh'><?=$write[wr_2]?></textarea></td>
</tr>
<? if ($is_norobot) { ?>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<tr class='ht'>
<td><?=$norobot_str?></td>
<td><input type=input name='wr_key' required itemname='자동등록방지' size=10 class=is>
왼쪽의 글자중<FONT COLOR="red"> 빨간글자만</FONT> 순서대로 입력하세요.
</td>
</tr>
<? } ?>
<tr><td colspan=3 class=line></td></tr>
</table><br>
<table width=100%>
<tr>
<td colspan=2 align=center>
<span id=btn_hidden><input name=btnsubmit type=image src='<?=$board_skin?>/text_save.gif' alt='확인' border=0 align=absmiddle></span>
</td>
</tr>
</table>
</form>
<script language='Javascript'>
var f = document.fgbform;
if (f.w.value == "")
AddFile(5);
else
{
<?
$sql = " select max(wf_id) from $file_table where wr_id = '$wr_id' ";
$row = sql_fetch($sql);
$num = $row[0];
$sql = " select * from $file_table
where wr_id = '$wr_id'
order by wf_id ";
$result = sql_query($sql);
?>
AddFile(<?=$num+1?>);
<?
for ($i=0; $i<=$num; $i++)
{
$row = mysql_fetch_array($result);
if (!$row[0])
continue;
//if ($w == "u") echo "f.elements['wf_id_del[$row[wf_id]]'].value = '$row[wf_id]';\n";
echo "f.elements['wf_cont[$row[wf_id]]'].value = '".addslashes($row[wf_cont])."';\n";
$file_name = get_thumb_filename($wr_id, $row[wf_id]);
$file = "./data/file/$bo_table/{$file_name}_s.jpg";
if (file_exists($file))
{
echo "document.images['preview[$row[wf_id]]'].src = '$file';\n";
echo "document.images['preview[$row[wf_id]]'].style.display = '';\n";
}
}
?>
}
if (f.w.value == '' && typeof(f.wr_name) != 'undefined') {
f.wr_name.focus();
} else if (f.w.value == 'u') {
f.wr_subject.focus();
if (typeof(f.ca_id) != 'undefined') {
f.ca_id.value = '<?=$ca_id?>';
}
}
function fgbform_check(f)
{
var count = 0;
for (i=0; i<input_idx; i++)
{
if (f.elements["wf_file["+i+"]"].value.match(/(.jpg|.jpeg)$/i))
count++;
else
{
if (f.elements["wf_file["+i+"]"].value != "")
{
alert(f.elements["wf_file["+i+"]"].value + "\n\n이미지 파일이 아니거나 jpg 파일이 아닙니다.\n\njpg 파일만 올릴 수 있습니다.");
f.elements["wf_file["+i+"]"].select();
f.elements["wf_file["+i+"]"].focus();
return false;
}
}
// 내용 검색에 나오게 하기 위하여 내용을 합침
f.wr_content.value += f.elements["wf_cont["+i+"]"].value;
}
// 입력일 경우에만 물어봄
if (f.w.value == '' && !count)
{
if (!confirm("이미지를 하나도 선택하지 않았습니다.\n\n그대로 입력하시겠습니까?"))
return false;
}
// 저장버튼을 없앤다
// btn_hidden.style.display = 'none';
document.getElementById('btn_hidden').style.display = 'none'; // 루트님
return true;
}
</script>
</td></tr></table>
=========================================================================
혹시 소스분석에 더 필요한 파일이 있으면 더 올려보겠습니다.
고수님들의 날카로운 분석... 기대합니다... 부탁드립니다.
지금 사용중인 갤러리 스킨은 '치에'님께서 답사기 스킨을 수정하신 것으로 사용중입니다.
이 스킨은 아시다시피, 별도의 테이블을 자동으로 만들고, 그곳에 wr_id와 wf_id, 그리고 각 사진별
설명을 적을 수 있는 필드인 wf_cont가 있습니다 .이 세 개중에 wr_id와 wf_id의 조합을 이용해
파일이름을 만들어 data/file 폴더에 저장하는 것 까지는 알겟습니다..... (이거 하나 알아내는데도 거의 죽다살았어요..ㅜㅜ)
암튼... 근데 문제는 게시판 리스트에서 게시물을 선택한 후 복사 혹은 이동을 하면, 기본적으로 그누보드에서
제공하는 필드에 담겼던 사진 두 장은 정상적으로 이동이 되는데. 나머지 사진들.. 즉, 별도의 추가 테이블(file_table)을 이용한 00055_000.jpg, 00055_001.jpg, 00055_002.jpg 등의 파일들은 복사되어 저장될 게시판에 복사가 되질
않고 있습니다.....
전에 제가 질문을 잘못드려 wr_1~wr_5의 기본적으로 제공하는 추가필드를 이용한 줄 알았는데,
오늘 찬찬히 살펴보니 아예 새로운 테이블을 만들어서 사진을 저장하더군요.....
어찌하면 되겠습니까... 초보자라서 소스분석을 나름대로 해보고 sql 쿼리문도 작성해서 해봤는데 영 안되는군요;;
도움 부탁 드리며.. 현재 사용중인 gbupdate.skin.php와 gbform.skin.php를 아래에 올려보겠습니다...
스킨의 원본 그대로 입니다.
====================================================================================================
gbupdate.skin.php 소스내용
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include "$board_skin/config.skin.php";
$msg = "";
for ($i=count($_POST["wf_cont"])-1; $i>=0; $i--)
{
if ($_POST[wf_id_del][$i])
{
$file_name = get_thumb_filename($wr_id, $i);
@unlink("./data/file/$bo_table/${file_name}.jpg");
$sql = " delete from $file_table where wr_id = '$wr_id' and wf_id = '$i' ";
sql_query($sql);
continue;
}
$file_name = get_thumb_filename($wr_id, $i);
if ($_FILES["wf_file"][error][$i] == 0 && $_FILES["wf_file"][size][$i] <= ($file_size * 1024))
{
$src_file = $_FILES["wf_file"][tmp_name][$i];
$dst_file = $image = "./data/file/$bo_table/$file_name.jpg";
move_uploaded_file($src_file, $dst_file);
$size = getimagesize($image);
$src = imagecreatefromjpeg($image);
// 이미지 높이 비율
$rate = $size[1] / $size[0];
// 작은이미지의 높이
$simg_height = (int)($simg_width * $rate);
// 이미지가 jpg 라면
if ($src)
{
// 이미지(소) 생성
$dst = imagecreatetruecolor($simg_width, $simg_height);
// 1.00.05 gd 버전에 따라
if (function_exists("imagecopyresampled")) {
imagecopyresampled($dst, $src, 0, 0, 0, 0, $simg_width, $simg_height, $size[0], $size[1]);
} else {
// 1.00.02 imagecopyresized -> imagecopyresampled 로 교체
imagecopyresized($dst, $src, 0, 0, 0, 0, $simg_width, $simg_height, $size[0], $size[1]);
}
// imagejpeg($dst, "./data/file/$bo_table/{$file_name}.jpg", $image_quality); // 주석 다니깐 월레 크기로 파일로..
}
}
else if ($_FILES["wf_file"][size][$i] > ($file_size * 1024))
{
$msg = "용량이 {$file_size}KB 이상되는 이미지 파일은 업로드 되지 않습니다.\\n\\n만약, 이미지가 업로드 되지 않았다면 용량이 초과한 경우일 겁니다.";
}
$file = "./data/file/$bo_table/{$file_name}.jpg";
if ($_FILES["wf_file"][error][$i] == 0 || $_POST[wf_cont][$i] || file_exists($file))
{
$sql = " insert $file_table
set wr_id = '$wr_id',
wf_id = '$i',
wf_cont = '{$_POST[wf_cont][$i]}' ";
$result = @mysql_query($sql);
if (!$result)
{
$sql = " update $file_table
set wf_cont = '{$_POST[wf_cont][$i]}'
where wr_id = '$wr_id'
and wf_id = '$i' ";
@mysql_query($sql);
}
}
else
{
$sql = " delete from $file_table where wr_id = '$wr_id' and wf_id = '$i' ";
@mysql_query($sql);
}
}
if ($msg)
echo "<script> alert('$msg'); </script>";
//print_r2($_FILES); exit;
?>
============================================================================================
gbform.skin.php 소스 내용
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include "$board_skin/config.skin.php";
// 테이블 자동 생성
$sql = " CREATE TABLE $file_table (
wr_id int(11) NOT NULL default '0',
wf_id tinyint(4) NOT NULL default '0',
wf_cont text NOT NULL,
PRIMARY KEY (wr_id,wf_id)
) TYPE=MyISAM ";
@mysql_query($sql);
if (!$skin_no) $skin_no = "01";
?>
<link rel='stylesheet' href='<?=$board_skin?>/style.css' type='text/css'>
<table width='700' align=center border=0 cellpadding=0 cellspacing=0><tr><td>
<form name=fgbform method=post action='./?doc=bbs/gbupdate.php'
enctype='multipart/form-data'
onsubmit='return fgbform_check(this);'>
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=bo_table value='<?=$bo_table?>'>
<input type=hidden name=wr_id value='<?=$wr_id?>'>
<input type=hidden name=sselect value='<?=$sselect?>'>
<input type=hidden name=stext value='<?=$stext?>'>
<input type=hidden name=section value='<?=$section?>'>
<input type=hidden name=ssort value='<?=$ssort?>'>
<input type=hidden name=sorder value='<?=$sorder?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=wr_recv_email value='<?=$recv_email?>'>
<input type=hidden name=wr_content value='.'>
<?
if ($w == "u")
$title_img = "title_edit.gif";
else if ($w == "r") {
$title_img = "title_reply.gif";
// 텍스트일 경우 원글을 보여준다.
if ($write[wr_html] == true)
$content = ">\n> " . preg_replace("/\n/", "\n> ", get_text($write[wr_content], 0)) . "\n> \n\n";
} else
$title_img = "title_write.gif";
?>
<TABLE BORDER="0"><TR><TD></TD></TR></TABLE>
<table width='100%' cellpadding=0 cellspacing=0 bgcolor=#FFFFFF border=0>
<colgroup width=80>
<colgroup width=''>
<tr><td colspan=3 class=line></td></tr>
<tr><td colspan=3 class=ct> <B>새로운 사진 등록하기</B></td></tr>
<? if ($is_name) { ?><tr><td height=30> <span class=tb>N</span>ame</td><td><input type=text name='wr_name' size=15 maxlength=20 required itemname='이름' value='<?=$name?>' class=is></td>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_passwd) { ?><tr><td height=30> <span class=tb>P</span>assword</td><td><input type=password name='wr_passwd' size=15 maxlength=20 <?=$passwd_required?> itemname='비밀번호' class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_email) { ?><tr><td height=30> <span class=tb>E</span>-mail</td><td><input type=text name='wr_email' maxlength=100 email itemname='E-MAIL' value='<?=$email?>' class=is size=45 class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_homepage) { ?><tr><td height=30> <span class=tb>H</span>omepage</td><td><input type=text name='wr_homepage' itemname='홈페이지' value='<?=$homepage?>' class=is size=45 class=is></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<? if ($is_category) { ?><tr><td height=30> <span class=tb>C</span>ategory</td><td><select name=ca_id class=is required itemname='분류'><option value=''>선택하세요<?=$category_option?></select></td></tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr><? } ?>
<tr>
<td height=30> <span class=tb>T</span>itle</td>
<td><input type=text name='wr_subject' required itemname='제목' value='<?=$subject?>' class=is size=40>
<? if ($is_notice) { ?><input type=checkbox name=wr_notice value='-1' <?=$notice_checked?>>공지 <? } ?>
<? if ($is_secret) { ?><input type=checkbox name=wr_secret value='1' <?=$secret_checked?>>비밀글 <? } ?>
<td>
</tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<script language="JavaScript">
var input_idx = 0;
var input_max = 30;
function preview_image(event, idx)
{
if(event.srcElement.value.match(/(.jpg|.jpeg)$/i))
{
document.images["preview["+idx+"]"].src = "file://" + event.srcElement.value;
document.images["preview["+idx+"]"].style.display = "";
}
else
document.images["preview["+idx+"]"].style.display = "none";
}
function AddFile(add_idx)
{
var objTbl;
if (document.getElementById) {
objTbl = document.getElementById("tblAttFiles");
} else {
objTbl = document.all["tblAttFiles"];
}
var objRow;
var objCell;
if (input_idx+add_idx > input_max)
{
alert(input_max + "개 이하만 입력 가능합니다.");
return false;
}
var bgcolor;
for (var i=input_idx; i<input_idx+add_idx; i++)
{
objRow = objTbl.insertRow(i);
objCell = objRow.insertCell(0);
if (i%2==0)
bgcolor = '#FAFAFA';
else
bgcolor = '#FFF2F3';
objCell.innerHTML =
"<table width=100% cellpadding=2 bgcolor='"+bgcolor+"'>\n" +
<? if ($w == "u") { ?>
"<tr><td><font color=crimson><b>"+(i+1)+".</b></font> <input type=checkbox name=\"wf_id_del["+i+"]\" value='1'>삭제</td></tr>\n" +
<? } else { ?>
"<tr><td><font color=crimson><b>"+(i+1)+".</b></font></td></tr>\n" +
<? } ?>
"<tr><td align=center><img id=\"preview["+i+"]\" style=\"width:300px; display:none;\" border=\"0\"></td></tr>\n" +
"<tr><td><span class=tb>P</span>hoto : <input type=file name=\"wf_file["+i+"]\" size=31 class=is onChange=\"preview_image(event, "+i+")\"></td></tr>\n" +
"<tr><td valign=top><span class=tb>M</span>emo : <input type=text name=\"wf_cont["+i+"]\" class=is size=46></td></tr>\n" +
"</table>\n";
}
//document.recalc();
input_idx += add_idx;
}
</script>
<? if ($is_upload) { ?>
<tr>
<td height=30> <span class=tb>대표사진</span> #1</td>
<td><input type=file name='wr_file1' itemname='파일 #1' class=is size=40>
<?=$file[1][delete]?>
<br> ※ <?=$upload_max_filesize?> 이하만 업로드 가능
</td>
</tr>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<? } ?>
<tr>
<td> <span class=tb>M</span>emo1</td>
<td><textarea name='wr_1' style='word-break:break-all;' rows=5 cols=54 itemname='내용' class='textarea lh'><?=$write[wr_1]?></textarea></td>
</tr>
<tr><td colspan=2 height=4></td></tr>
<tr>
<td height=30> <span class=tb>C</span>ontents</td>
<td>
<span class=lh style="color:#FF6600;">
이미지 파일은 jpg 만 가능합니다.
<br>이미지 파일의 용량은 한개당 <?=nf($file_size)?>KB 이하만 가능합니다.
<br>순서대로 입력해 주시고 비어있는곳은 그냥 놔두신 후 저장하시면 됩니다.
</span>
<table id="tblAttFiles"></table><br>
<input type=button value="1개 추가" onclick="AddFile(1)">
<input type=button value="5개 추가" onclick="AddFile(5)">
<input type=button value="10개 추가" onclick="AddFile(10)">
</td>
</tr>
<tr><td colspan=2 height=4></td></tr>
<tr>
<td> <span class=tb>M</span>emo2</td>
<td><textarea name='wr_2' style='word-break:break-all;' rows=5 cols=54 itemname='내용' class='textarea lh'><?=$write[wr_2]?></textarea></td>
</tr>
<? if ($is_norobot) { ?>
<tr><td colspan=2 height=1 background='<?=$board_skin?>/dotline.gif'></td></tr>
<tr class='ht'>
<td><?=$norobot_str?></td>
<td><input type=input name='wr_key' required itemname='자동등록방지' size=10 class=is>
왼쪽의 글자중<FONT COLOR="red"> 빨간글자만</FONT> 순서대로 입력하세요.
</td>
</tr>
<? } ?>
<tr><td colspan=3 class=line></td></tr>
</table><br>
<table width=100%>
<tr>
<td colspan=2 align=center>
<span id=btn_hidden><input name=btnsubmit type=image src='<?=$board_skin?>/text_save.gif' alt='확인' border=0 align=absmiddle></span>
</td>
</tr>
</table>
</form>
<script language='Javascript'>
var f = document.fgbform;
if (f.w.value == "")
AddFile(5);
else
{
<?
$sql = " select max(wf_id) from $file_table where wr_id = '$wr_id' ";
$row = sql_fetch($sql);
$num = $row[0];
$sql = " select * from $file_table
where wr_id = '$wr_id'
order by wf_id ";
$result = sql_query($sql);
?>
AddFile(<?=$num+1?>);
<?
for ($i=0; $i<=$num; $i++)
{
$row = mysql_fetch_array($result);
if (!$row[0])
continue;
//if ($w == "u") echo "f.elements['wf_id_del[$row[wf_id]]'].value = '$row[wf_id]';\n";
echo "f.elements['wf_cont[$row[wf_id]]'].value = '".addslashes($row[wf_cont])."';\n";
$file_name = get_thumb_filename($wr_id, $row[wf_id]);
$file = "./data/file/$bo_table/{$file_name}_s.jpg";
if (file_exists($file))
{
echo "document.images['preview[$row[wf_id]]'].src = '$file';\n";
echo "document.images['preview[$row[wf_id]]'].style.display = '';\n";
}
}
?>
}
if (f.w.value == '' && typeof(f.wr_name) != 'undefined') {
f.wr_name.focus();
} else if (f.w.value == 'u') {
f.wr_subject.focus();
if (typeof(f.ca_id) != 'undefined') {
f.ca_id.value = '<?=$ca_id?>';
}
}
function fgbform_check(f)
{
var count = 0;
for (i=0; i<input_idx; i++)
{
if (f.elements["wf_file["+i+"]"].value.match(/(.jpg|.jpeg)$/i))
count++;
else
{
if (f.elements["wf_file["+i+"]"].value != "")
{
alert(f.elements["wf_file["+i+"]"].value + "\n\n이미지 파일이 아니거나 jpg 파일이 아닙니다.\n\njpg 파일만 올릴 수 있습니다.");
f.elements["wf_file["+i+"]"].select();
f.elements["wf_file["+i+"]"].focus();
return false;
}
}
// 내용 검색에 나오게 하기 위하여 내용을 합침
f.wr_content.value += f.elements["wf_cont["+i+"]"].value;
}
// 입력일 경우에만 물어봄
if (f.w.value == '' && !count)
{
if (!confirm("이미지를 하나도 선택하지 않았습니다.\n\n그대로 입력하시겠습니까?"))
return false;
}
// 저장버튼을 없앤다
// btn_hidden.style.display = 'none';
document.getElementById('btn_hidden').style.display = 'none'; // 루트님
return true;
}
</script>
</td></tr></table>
=========================================================================
혹시 소스분석에 더 필요한 파일이 있으면 더 올려보겠습니다.
고수님들의 날카로운 분석... 기대합니다... 부탁드립니다.
댓글 전체
>
> 암튼... 근데 문제는 게시판 리스트에서 게시물을 선택한 후 복사 혹은 이동을 하면, 기본적으로 그누보드에서
> 제공하는 필드에 담겼던 사진 두 장은 정상적으로 이동이 되는데. 나머지 사진들.. 즉, 별도의 추가 테이블(file_table)을 이용한 00055_000.jpg, 00055_001.jpg, 00055_002.jpg 등의 파일들은 복사되어 저장될 게시판에 복사가 되질
> 않고 있습니다.....
>
멀티 갤러리(답사기) 스킨은 별도의 테이블에 파일 정보를 보관하므로 이동 및 복사에 대한 구현을 별도로 하셔야 됩니다.
이동 및 복사는 bbs/gbmoveall.php와 bbs/gbmoveallupdate.php을 사용데
bbs/gbmoveallupdate.php를 분석하셔서 기존 게시판 내용 처리후
추가테이블에 대한 내역과 파일을 이동 및 복사하도록 처리하는것을 추가하셔야 합니다.
이때 주의할것은 이동 및 복사되는 게시판도 멀티 갤러리(답사기)용 게시판이어야 겠죠.
> 암튼... 근데 문제는 게시판 리스트에서 게시물을 선택한 후 복사 혹은 이동을 하면, 기본적으로 그누보드에서
> 제공하는 필드에 담겼던 사진 두 장은 정상적으로 이동이 되는데. 나머지 사진들.. 즉, 별도의 추가 테이블(file_table)을 이용한 00055_000.jpg, 00055_001.jpg, 00055_002.jpg 등의 파일들은 복사되어 저장될 게시판에 복사가 되질
> 않고 있습니다.....
>
멀티 갤러리(답사기) 스킨은 별도의 테이블에 파일 정보를 보관하므로 이동 및 복사에 대한 구현을 별도로 하셔야 됩니다.
이동 및 복사는 bbs/gbmoveall.php와 bbs/gbmoveallupdate.php을 사용데
bbs/gbmoveallupdate.php를 분석하셔서 기존 게시판 내용 처리후
추가테이블에 대한 내역과 파일을 이동 및 복사하도록 처리하는것을 추가하셔야 합니다.
이때 주의할것은 이동 및 복사되는 게시판도 멀티 갤러리(답사기)용 게시판이어야 겠죠.