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

본문 바로가기
 
 
 
오늘 846
어제 1,997
최대 2,454
전체 3,136,195
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

온라인강좌 홈 > 온라인강좌 > 온라인강좌

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

페이지 정보

작성일2014-09-13 13:02 조회9,684회 댓글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 134건 1 페이지
온라인강의 목록
번호 제목
134
133
PHP icode SMS 문자 자동발송 (update.2016-10-09)인기글  Hit.1975
132
PHP 상대경로와 절대경로 확인하기 (write.2016-02-16)인기글  Hit.1886
131
130
129
128
127
126
125
124
123
122
121
120
열람중
118
117
PHP $DOCUMENT_ROOT 사용하기 (write.2014-04-18)인기글  Hit.3275
116
PHP MySQL 자료 백업 (write.2014-01-26)인기글  Hit.3481
115
PHP rmdir() 비어있지 않은 폴더삭제 (write.2013-08-22)인기글  Hit.5093
114
113
112
PHP 글자수 세기 (write.2013-06-19)인기글  Hit.5803
111
110
PHP frame에서 target=_top 사용하기 (write.2013-05-28)인기글  Hit.5311
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호: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
 
모바일 버전으로 보기