엑셀, CSV 파일 업로드 하여 DB 저장 > 온라인강의

본문 바로가기
 
 
 
오늘 1,084
어제 1,706
최대 2,526
전체 3,395,603

최근 방문자

1011
1853
1775
1756
1706
1084
18 19 20 21 22 23
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

select * from g5_menu where me_use = '1' and me_link like '%lecture%'
온라인강좌 홈 > 온라인강좌 > 온라인강좌

PHP | 엑셀, CSV 파일 업로드 하여 DB 저장 (update. 2015-01-07)

페이지 정보

작성일2014-09-13 13:02 조회11,104회 댓글0건

본문

CSV 파일의 필드명만 데이타 테이블에 맞추면 된다.
테이블에 맞췄음에도 불구하고 입력 에러시 파일안에 특수 문자 검색을 해볼것.

*. CSV 파일          :  xls.cvs
*. 파일 업로드 폼    :  write.php
*. 받은파일 컨트롤  :  write_proc.php



1. 디비 테이블 생성
CREATE TABLE IF NOT EXISTS `디비테이블` (
  `idx` int(11) NOT NULL auto_increment,
  `bo_table` varchar(50) NOT NULL,
  `wr_id` varchar(10) NOT NULL,
  `code` varchar(20) NOT NULL,
  `wdate` varchar(50) NOT NULL,
  PRIMARY KEY  (`idx`)
)



2. data 폴더 생성후 퍼미션을 777 로 변경



3. xls.cvs

1번라인은 참고용으로 실제 디비에는 업로드되지 않습니다.  csv 항목중 첫번째것만 디비에 업로드합니다.
code      code2    code3
국화꽃    W          25
꽃미녀    W          26
여미지    M          27



4. write.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>CVS 파일 올리기</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body, td, a { font-size:12px; font-family:"돋움"; }
img { border:0; }
.hp_div  { width:900px; padding:0 0 0 200px; }
.hp_div1 { font-family:"돋움"; font-size:11px; float:left; width:150px; height:20px; padding:5px 0 0 0; text-align:center; vertical-align:middle; background:#f5f5f4; color:#292929; }
.hp_div2 { font-family:"돋움"; float:left; width:300px; height:25px; padding:0 5px 0 5px; }
.hp_div3 { font-family:"돋움"; float:left; height:25px; }
</style>
</head>

<body>
<form method="post" name="form" action="write_proc.php" enctype="multipart/form-data" style="margin:0; padding:0;">
<input type="hidden" name="bo_table" value="<?php echo $bo_table; ?>">
<input type="hidden" name="wr_id" value="<?php echo $wr_id; ?>">
<div class="hp_div">

    <div class="hp_div1">파일첨부</div>
    <div class="hp_div2"><input type="file" name="upfile" id="upfile" style="width:300px; height:25px;"></div>
    <div class="hp_div3" align="center"><input type="submit" value="올리기" style="width:50px; height:25px;"></div>
    <div style="clear:both;"></div>

</div>
</form>
</body>
</html>



5. write_proc.php

<?php
$mysql_host = 'DB서버주소';
$mysql_user = 'DB아이디';
$mysql_password = 'DB비밀번호';
$mysql_db = 'DB이름';
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
mysql_select_db("$mysql_db", $dbconn);

// 저장될 디비 테이블명
$TABLE_NAME = "디비테이블";

// 저장될 디렉토리
$upfile_dir = "./data";

//CSV데이타 추출시 한글깨짐방지
//setlocale(LC_CTYPE, 'ko_KR.utf8');
setlocale(LC_CTYPE, 'ko_KR.eucKR'); // CSV 한글 깨짐 문제
    
//장시간 데이터 처리될경우
set_time_limit(0);

echo ('<meta http-equiv="content-type" content="text/html; charset=utf-8">');

$upfile_name = $_FILES['upfile']['name']; // 파일이름
$upfile_type = $_FILES['upfile']['type']; // 확장자
$upfile_size = $_FILES['upfile']['size']; // 파일크기
$upfile_tmp  = $_FILES['upfile']['tmp_name']; // 임시 디렉토리에 저장된 파일명
//echo "upfile_name = ". $upfile_name ."<br>";
//echo "upfile_type = ". $upfile_type ."<br>";
//echo "upfile_size = ". $upfile_size ."<br>";
//echo "upfile_tmp  = ". $upfile_tmp ."<br>";
$uploadfile = $uploaddir . $_FILES['userfile']['name'];

//확장자 확인
if(preg_match("/(\.(csv|CSV))$/i",$upfile_name)) {
} else {
    echo ("<script>window.alert('업로드를 할수 없는 파일 입니다.\\n\\r확장자가 csv 인경우만 업로드가 가능합니다.'); history.go(-1) </script>");
    exit;
}

if ($upfile_name){
    //폴더내에 동일한 파일이 있는지 검사하고 있으면 삭제
    if (file_exists("{$upfile_dir}/{$upfile_name}") ) { unlink("{$upfile_dir}/{$upfile_name}"); }
    
    if (!$upfile) {
        //echo ("<script>window.alert('지정된 용량(2M)을 초과'); history.go(-1) </ script>");
        // exit;
    }
    
    if ( strlen($upfile_size) < 7 ) {
        $filesize = sprintf("%0.2f KB", $upfile_size/1000);
    } else{
        $filesize = sprintf("%0.2f MB", $upfile_size/1000000);
    }
    
    if (move_uploaded_file($upfile_tmp,"{$upfile_dir}/{$upfile_name}")) {
    } else {
        echo ("<script>window.alert('디렉토리에 복사실패'); history.go(-1) </script>");
        exit;
    }
}

// 기본 데이타 삭제후 저장하고자 할때는 아래 2개 주석 해지
//$sql = "delete from ". $TABLE_NAME ;
//$result = mysql_query($sql, $dbconn);

// 저장된 파일을 읽어 들인다
$csvLoad  = file("{$upfile_dir}/{$upfile_name}");

// 행으로 나누어서 배열에 저장
$csvArray = explode("\r\n",implode($csvLoad));        // 문장의 끝라인은 \r\n 입니다. (2014-11-14 RYO)

// 행으로 나눠진 배열 갯수 만큼 돌린다($csvArray[0]에는 필드 이름이 있으므로 $i는 1번 부터 시작하고 총 갯수는 $csvArray에서 1를 뺌니다
for($i=1;$i<count($csvArray)-1;$i++){
    // 각 행을 콤마를 기준으로 각 필드에 나누고 DB입력시 에러가 없게 하기위해서 addslashes함수를 이용해 \를 붙입니다
    $field     = explode(",",addslashes($csvArray[$i]));
    
    // 나누어진 각 필드에 앞뒤에 공백을 뺸뒤 ''따옴표를 붙이고 ,콤마로 나눠서 한줄로 만듭니다.
    $value     = "'" . trim(implode("','",$field)) . "'";
    $value = iconv("euc-kr", "utf-8", $value);  // CSV 한글 깨짐 문제 2014-11-14 해피정닷컴
    
    
    // $field[0] 기존자료 중복체크
    $query_check = "select * from ".$TABLE_NAME." where bo_table='".$bo_table."' and wr_id='".$wr_id."' and code='".$field[0]."'  ";
    //echo $query_check ."<br><br>";
    $result_check = mysql_query($query_check);
    $data_check = mysql_fetch_array($result_check);
    $isset_check = $data_check["code"];  // 필드 데이타 하나를 호출합니다.
    //echo $isset_check;  // 정상보이는지 확인
    
    if(isset($isset_check)) { // 자료 있을때
    } else { // 자료 없을때
        //echo "등록된 내용이 없습니다!\n";   //<<--- 메세지!
        
        // php쿼리문을 이용해서 입력한다.
        //$insertSQL = sprintf("insert into %s (%s) values (%s)", $TABLE_NAME , $csvArray[0], $value);
        $insertSQL = sprintf("insert into ".$TABLE_NAME." (bo_table, wr_id, code) values ('".$bo_table."', '".$wr_id."', '".$field[0]."'); ", $TABLE_NAME , $csvArray[0], $value);
        
        echo $insertSQL ."<br><br>";
        $Result    = mysql_query($insertSQL) or die(mysql_error());
    }
}

// 입력이 된후 업로드된 파일을 삭제한다
unlink("{$upfile_dir}/{$upfile_name}");

//exit;

if ($Result) {
    echo " <script>alert('저장되었습니다.');  document.location.href='write.php?bo_table=".$bo_table."&wr_id=".$wr_id."'; </script>";
    echo ("<script>window.alert('자료를 성공적으로 저장하였습니다.');
        history.go(-1)
    </script>");
} else {
    echo " <script>alert('추가된 자료가 없습니다.');  document.location.href='write.php?bo_table=".$bo_table."&wr_id=".$wr_id."'; </script>";
    echo ("<script>window.alert('추가된 자료가 없습니다.');
        history.go(-1)
    </script>");
}

@mysql_close();
?>


참고자료
http://nuax.tistory.com/entry/PHP-에서-CSV파일-업드로-후-MYSQL-DB에-입력하기
http://ncube.net/7970
http://www.autoboy.pe.kr/159
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=388809 
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.


목록

Total 2,005건 1 페이지
온라인강의 목록
번호 제목
2005
2004
2003
2002
2001
2000
1999
1998
1997
1996
1995
1994
1993
1992
1991
1990
1989
1988
1987
1986
1985
1984
1983
1982
1981
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호:119-05-36414 (08394) 서울시 구로구 디지털로 242 한화비즈메트로1차 1502호
전화: 070-7600-3500 팩스:02-865-3528 개인정보관리:정창용 mail@happyjung.com 에스크로확인
개인정보취급방침
COPYRIGHT 2001~2017 해피정닷컴. All rights reserved. 부가통신사업신고:서울체신청-1217 통신판매신고:2014-서울구로-0074
 
모바일 버전으로 보기