쇼핑몰운영중에 필요한 관리웹을 만들어보고자, 프로그래머도 아닌 컴맹이 삽질중....
내가 나중에 다시 보기위해서 올림.....
중복값을 찾아서 비교하기 위해서 while문, foreach문으로 돌려보고,
in_array함수, array_search함수등 몇일을 삽질하다 결국은 count함수로 해결
맞는지는 모르고, 일단 돌아는 감, 필요하신분들은 참고만 하삼^^
일단 네이버스마트스토어 내가 올린 상품목록을 다운받아옴. 이글을 작성하기위해 내용은 지우고 제목만 남겨놓음.
엑셀에 있는 열을 전부 db에 저장하는게 아니고, 필요한 열만 올리기위해서
맨위 노란색으로 된 1행은 db에 저장시 참고하기 위해 임시적으로 만들어놓은 행.
예를들면 상품번호(열번호 A = 0), 상품명(열번호 E = 4), 판매가(열번호 K = 10) 만 선택해서 db에 저장할 예정
실제 업로드시에 1행(노란색)은 지우고, 내용은 있어야됨.
DB는 아래와 같은걸로 가정하에 진행......
테이블 이름은 : naver_product
필드는 : no, product_number, product_name, pirce......정도라고하고,
폼으로 입력받는 파일이 있고, 입력받은 엑셀자료를 db에 저장하는 실행파일
폼으로 입력받는 파일은 맨 아래에......
이름은 phpexcel_up_action.php 정도로 만들면 되려나???
---------------------------------------------------------------------------------------------------------------------------
<?
include_once '../phpexcel/PHPExcel.php';
include_once '../db_connect.php'; // db연결
$objPHPExcel = new PHPExcel();
$allData = array(); // 불러온 엑셀을 담을수 있는 배열변수 생성
// db저장시 입력할 내용을 미리 변수로 지정
$insert1 = "INSERT INTO naver_product (product_number, product_name, pirce)";
$insert2 = " VALUES ('";
$insert3 = ")";
// 추가된 행과, 중복된 행의 갯수를 표시하기 위해 변수지정
$add_line = 0;
$err_line = 0;
// phpexcel로 엑셀파일을 불러오는 부분, 잘모르니 퍼온대로....
$filename = iconv("UTF-8", "EUC-KR", $_FILES['excelFile']['tmp_name']);
try {
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$extension = strtoupper(pathinfo($filename, PATHINFO_EXTENSION));
$sheetsCount = $objPHPExcel -> getSheetCount();
for($sheet = 0; $sheet < $sheetsCount; $sheet++) {
$objPHPExcel -> setActiveSheetIndex($sheet);
$activesheet = $objPHPExcel -> getActiveSheet();
$highestRow = $activesheet -> getHighestRow();
$highestColumn = $activesheet -> getHighestColumn();
for($row = 2; $row <= $highestRow; $row++) {
$rowData = $activesheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE);
$allData[$row] = $rowData[0];
}
}
}
catch(exception $exception) {
}
// 여기서부터 phpexcel로 읽어드린 엑셀파일을 db에 저장하기 위해 엑셀값을 가져옴
// 먼저 각행별로 나눔 (1행, 2행, 3행......)
foreach($allData as $key=>$value)
{
// 한개의 행이 끝나면 다음행으로 넘어갈수있게 리셋해줌,
// 리셋안해줄경우 1행, 1행,2행, 1행,2행,3행 <-이런식으로 출력됨
// 1행,2행,3행 으로출력되게
unset($row_value);
// 예를들면 상품번호(열번호 A = 0), 상품명(열번호 E = 4), 판매가(열번호 K = 10) 만 불러올 예정
foreach($value as $key2=>$value2)
{
if ($key2 == "0") { // 열번호가 0이면, 엑셀파일에 상품번호가 있는 열A에 들어있는 값을 $row_value 변수에 합쳐(?) 줌.
$row_value .= trim($value[$key2])."','"; // 현재 : 000','
// 중복값이 있는지 체크하기위해 변수생성, foreach에서 계속 값이 바뀜으로 값이 안바뀌게 일단 잡아놓음
$n_number = $value[$key2];
} else if ($key2 == "4") { // 열번호가 4면, 열E에 들어있는 값을 $row_value 변수에 합쳐(?) 줌.
$row_value .= trim($value[$key2])."','"; //현재 000','444','
} else if ($key2 == "10") { // 열번호가 10이면, 열K에 들어있는 값을 $row_value 변수에 합쳐(?) 줌.
$row_value .= trim($value[$key2])."','"; // 현재 000','444','1110','
}
// 네이버상품번호가 있으면 기존데이터에서 갯수를 센다
// group by를 안해주니, 데이터가 전혀없는데도 1이라는 숫자가 나왔다 ㅠㅠ
if ($n_number) {
$query3 = "SELECT product_number ,
COUNT(*) FROM product where product_number = '$n_number' GROUP BY product_number";
$result3 = $conn->query($query3);
$n_line = mysqli_num_rows($result3); // 나온 갯수를 변수에 저장
} else if (!$n_number)
{
$n_line = '0'; // 네이버상품번호가 없을경우 $n_line값을 0으로 변경해준다. 이걸안해주면 값이 이상하게 나옴ㅠㅠ
}
// 네이버 상품번호가 없을때, 중복이 아니므로 db에 저장
if ($n_line == '0')
{
$row_value = substr($row_value,0,-2); // 현재 000','444','1110',' 이값이면 db 저장시 에러발생 맨뒤에 ,' 두개를 지워줌
$add_line++; // db에 저장되는 갯수를 표시하기 위해
// 테스트시 바로아래 쿼리와 맨아래 if문을 주석으로 중지시키고, 이 라인을 실행해서 출력되는 내용확인
// 오류발생시 출력되는 내용을 Mysql에 직접 쿼리를 줘보면 에러내용을 대충알수있슴
/* 맨 위에서 지정해준 변수내용대로 출력, 이 주석은 지워도댐
$insert1 = "INSERT INTO naver_product (product_number, product_name, pirce)";
$insert2 = " VALUES ('";
$insert3 = ")";
*/ "INSERT INTO naver_product (product_number, product_name, pirce)" VALUES (' 000','444','1110'")
// echo "$insert1 $insert2 $row_value $insert3 ;\n"; // 테스트시 이앞에 주석만 제거, 위에는 그냥 주석문임
$query = "$insert1 $insert2 $row_value $insert3";
$result = mysqli_query($conn,$query);
echo "</br>";
echo "</br>";
// 그렇지 않고, 네이버 상품번호가 있을때
} else
{
$err_line++; // 중복된 행의 갯수를 1개 늘려준다
}
}
echo "</br></br></br></br>";
if ($result)
{
?> <script>
alert("<? echo $add_line ?>개의 행이 추가되었습니다.(중복 <? echo $err_line ?>개)");
location.replace('../product/product_list_view.php');
</script>
<? } else if ($row_value) {
?> <script>
alert("추가할 상품이 없습니다.(중복 <? echo $err_line ?>개)");
location.replace('../product/product_list_view.php');
</script>
<? } else {
?> <script>
alert("DB 저장시 오류가 발생했습니다");
location.replace('../product/product_list_view.php');
</script>
<?
}
mysqli_close($conn);
?>
---------------------------------------------------------------------------------------------------------------------------------
입력폼파일의 내용은
---------------------------------------------------------------------------------------------------------------------------------
<div align=center>상품 등록하기
<form enctype="multipart/form-data" action="./phpexcel_up_action.php" method="post">
<table border="2">
<tr>
<td><input type="file" name="excelFile"/></td>
</tr>
<tr>
<td style="text-align:center;"><input type="submit" value="업로드"/></td>
</tr>
</form>
</div>
</html>
---------------------------------------------------------------------------------------------------------------------------------------