게시판 엑셀 업로드 문제
본문
안녕하세요
https://sir.kr/g5_skin/47731?sfl=wr_name%2C1&stx=%ED%8E%84%EC%8A%A4%EB%82%98%EC%9D%B8
이 스킨의 관리자 모드에서
엑셀로 게시물을 업로드 하려고
영카드의 상품엑셀파일등록 부분을 따와서 얼추 흉내를 내보고 있습니다.
아래의 소스로 업로드까지는 성공을 했는데
문제는 wr_num까지 넘어가지가 않는것 같습니다..
DB상에서 wr_num과 wr_parent 가 맞아야 정상적으로 넘버가 카운팅 하는거 같은데.. 안맞습니다.
게시판관리 카운트조정에서도 원글 수가 맞지가 않습니다. (조정체크 하면 또 맞습니다..)
업데이트 소스는 아래와 같습니다... wr_1이 중복되면 거르게 해놨습니다.
<?php
$sub_menu = '400300';
include_once('./_common.php');
// 상품이 많을 경우 대비 설정변경
set_time_limit ( 0 );
ini_set('memory_limit', '50M');
auth_check_menu($auth, $sub_menu, "w");
function only_number($n)
{
return preg_replace('/[^0-9]/', '', (string)$n);
}
$is_upload_file = (isset($_FILES['excelfile']['tmp_name']) && $_FILES['excelfile']['tmp_name']) ? 1 : 0;
if( ! $is_upload_file){
alert("엑셀 파일을 업로드해 주세요.");
}
if($is_upload_file) {
$file = $_FILES['excelfile']['tmp_name'];
include_once(G5_LIB_PATH.'/PHPExcel/IOFactory.php');
$objPHPExcel = PHPExcel_IOFactory::load($file);
$sheet = $objPHPExcel->getSheet(0);
$num_rows = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$dup_wr_id = array();
$fail_wr_id = array();
$dup_count = 0;
$total_count = 0;
$fail_count = 0;
$succ_count = 0;
for ($i = 3; $i <= $num_rows; $i++) {
$total_count++;
$j = 0;
$rowData = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i,
NULL,
TRUE,
FALSE);
$mb_id = $member['mb_id'];
$wr_name = $member['mb_nick'];
$wr_password = $member['mb_password'];
$wr_email = $member['mb_email'];
$wr_homepage = $member['mb_homepage'];
$wr_reply = '';
$wr_num = get_next_num($write_table);
$wr_1 = addslashes((string)$rowData[0][$j++]);
$wr_2 = addslashes((string)$rowData[0][$j++]);
$wr_3 = addslashes($rowData[0][$j++]);
$wr_4 = addslashes((string)$rowData[0][$j++]);
$wr_5 = addslashes((string)$rowData[0][$j++]);
$wr_6 = addslashes((string)$rowData[0][$j++]);
$wr_7 = addslashes((string)$rowData[0][$j++]);
$wr_8 = addslashes((string)$rowData[0][$j++]);
$wr_9 = addslashes((string)$rowData[0][$j++]);
$wr_10 = addslashes((string)$rowData[0][$j++]);
if(!$wr_1) {
$fail_count++;
continue;
}
// wr_1 중복체크
$sql2 = " select count(*) as cnt from $write_table where wr_1 = '$wr_1' ";
$row2 = sql_fetch($sql2);
if(isset($row2['cnt']) && $row2['cnt']) {
$fail_wr_1[] = $wr_1;
$dup_wr_1[] = $wr_1;
$dup_count++;
$fail_count++;
continue;
}
$sql = " INSERT INTO {$write_table}
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name',
wr_option = '$html,$secret,$mail',
wr_subject = '$wr_subject',
wr_content = '$wr_subject',
wr_link1 = '$wr_link1',
wr_link2 = '$wr_link2',
wr_link1_hit = 0,
wr_link2_hit = 0,
wr_hit = 0,
wr_good = 0,
wr_nogood = 0,
mb_id = '$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 = '".G5_TIME_YMDHIS."',
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);
$succ_count++;
}
}
$g5['title'] = '상품 엑셀일괄등록 결과';
include_once(G5_PATH.'/head.sub.php');
?>
<div class="new_win">
<h1><?php echo $g5['title']; ?></h1>
<div class="local_desc01 local_desc">
<p>상품등록을 완료했습니다.</p>
</div>
<dl id="excelfile_result">
<dt>총상품수</dt>
<dd><?php echo number_format($total_count); ?></dd>
<dt>완료건수</dt>
<dd><?php echo number_format($succ_count); ?></dd>
<dt>실패건수</dt>
<dd><?php echo number_format($fail_count); ?></dd>
<?php if($fail_count > 0) { ?>
<dt>실패상품코드</dt>
<dd><?php echo implode(', ', $fail_wr_1); ?></dd>
<?php } ?>
<?php if($dup_count > 0) { ?>
<dt>상품코드중복건수</dt>
<dd><?php echo number_format($dup_count); ?></dd>
<dt>중복상품코드</dt>
<dd><?php echo implode(', ', $dup_wr_1); ?></dd>
<?php } ?>
</dl>
<div class="btn_win01 btn_win">
<button type="button" onclick="window.close();">창닫기</button>
</div>
</div>
<?php
include_once(G5_PATH.'/tail.sub.php');
엑셀파일은 아래와같이 사용중입니다.
고수님들의 가르침 부탁드립니다..ㅠㅠ
!-->답변 3
bbs/write_pudate.php
에서 wr_id 구하고 update하는 부분을 검토해 보세요
글쓰기 완료페이지에 보면 글 등록 후 새글 등록 등 추가 작업하는 소스가 있습니다. 참고 후 동일하게 넣어주시면 될거 같습니다.
db table 할때 넘버같은경우 고유값 키값으로 설정후 자동증가를 사용하면 굳이 다음 숫자를 안정해도 올라갈텐데 굳이 숫자를 계산해서 넣어야 하는건지 잘모르겠네요
그래도 굳이 숫자 개념으로 넣고 싶다면 숫자들어가는 데이터 형태 (int(10)) 형태가 되어있는지 확인해보시고
$wr_num = get_next_num($write_table); 값이 문자로 떨어지지 않는지
문자로 떨어진다면 형변환을 하시던지 아니면 db table 형태를 변경해서 입력해보세요
답변을 작성하시기 전에 로그인 해주세요.