엑셀 ( CSV ) 파일 업로드 하여 DB 저장 > 기술자료 | 해피정닷컴

엑셀 ( CSV ) 파일 업로드 하여 DB 저장 > 기술자료

본문 바로가기

사이트 내 전체검색

엑셀 ( CSV ) 파일 업로드 하여 DB 저장 > 기술자료

PHP 엑셀 ( CSV ) 파일 업로드 하여 DB 저장

페이지 정보


본문

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);
$dbconn = mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_db);

// 그누보드5 사용시
//include_once "../common.php"; // 그누브도5 common.php 경로
//$dbconn = mysqli_connect(G5_MYSQL_HOST,G5_MYSQL_USER,G5_MYSQL_PASSWORD,G5_MYSQL_DB) ;

// 저장될 디비 테이블명
$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 = mysqli_query($dbconn,$sql);

// 저장된 파일을 읽어 들인다
$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 = mysqli_query($dbconn,$query_check);
    $data_check = mysqli_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    = mysqli_query($dbconn,$insertSQL) or die(mysqli_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>");
}

@mysqli_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,634건 53 페이지
  • RSS
기술자료 목록
1594
MSSQL   23400  2014-09-29 11:28  
1593
HTML   15701  2014-09-28 23:45  
1592
HTML   13314  2014-09-28 23:28  
1591
JavaScript   19178  2014-09-27 08:32  
1590
ClassicASP   12329  2014-09-26 01:08 ~ 2018-12-01 22:51  
1589
그누보드   12158  2014-09-25 16:34  
1588
PHP   12917  2014-09-25 15:58 ~ 2018-09-26 14:52  
1587
JavaScript   13687  2014-09-25 14:32  
1586
그누보드   12257  2014-09-20 22:19  
1585
영카트   12883  2014-09-16 10:23  
열람
PHP   36619  2014-09-13 13:02 ~ 2022-09-26 20:44  
1583
영카트   15217  2014-09-05 22:06 ~ 2015-05-08 00:00  
1582
영카트   17567  2014-09-05 18:18  
1581
영카트   367063  2014-08-30 00:07  
1580
JavaScript   24731  2014-08-29 01:06 ~ 2016-08-04 00:00  
1579
그누보드   12136  2014-08-28 15:36  
1578
그누보드   13715  2014-08-23 19:55  
1577
그누보드   65316  2014-08-20 11:50 ~ 2022-11-22 16:25  
1576
일반   28221  2014-08-18 07:54  
1575
Adobe   15978  2014-08-16 23:54  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.