본문 바로가기
Web Program/Php Lecture

엑셀 파일 업로드후 데이타 읽기

by 현이빈이 2008. 9. 8.
반응형
<?php
/*
이 코드는 mysql테이블이 이미 설정되 있을경우 엑셀로 정리한 데이터를 쉽게 넣을수 있게 만든 코드 입니다.

접속함수는 각자 서버 환경에 맞게 설정하시고 Database 이름엔 이미 생성된 삽입할 테이블 이름을 정확히 넣어 주셔야 합니다.

엑셀 파일에서 전체 데이터를 선택하신뒤 Ctl + F버튼을 눌러 , (콤마) 를 찾습니다. (,를 기준으로 나누기 때문에 기존 데이터에 , 가
있으면 배열에 갯수가 안맞아서 에러가 납니다) 다른 부호나 빈 공간으로 Replace 하시기 바랍니다.

엑셀파일은 이미 생성된 테이블의 규격에 맞게 정보를 정리 하신뒤(특히 날짜 07/15/05 등은... 2005-07-05등으로 정확히 넣어 주셔야 합니다.)

맨 첫째 줄은 필드의 이름을 정확히 넣으셔야 합니다. (예: 필드가 c_id, c_name, c_dob, c_addr1, c_addr2 처럼 5개일경우라도
원하시는 필드 2개만 필요하시면 컬럼 두개만 작성하셔도 무방합니다. 나머지는 NULL로 되어도 괜찮을떈 NULL로 입력 됩니다.)

마지막으로 제일 중요한건 맨 마지막 컬럼은 빈칸이 있으면 안됩니다. (콤마 숫자를 잘못세서 배열 갯수가 헷갈려 에러가 날수가 있습니다.)
모든 데이타가 다 들어가는 열을 맨 오른쪽으로 엑셀에서 옮기시기 바랍니다.

별거 아닌 코딩이므로 자유롭게 배포 하셔도 좋습니다.

허접합니다. 초보 분들께 조금이나 도움이 되기를... --;;;; kero(kennethjro@msn.com) */

require_once('Connections/csv.php'); // mysql 접속 함수와 장소는 각자 맞게 설정

if($_POST['dbName']) { //함수 db_name이 넘어 오면 실행 시킨다.

    copy($csvFile,"copy.csv"); //csv 파일을 현재 디렉토리에 저장 시킨다
   
    $csvLoad = file("copy.csv"); // 저장된 파일을 읽어 들인다
   
    $csvArray = split("\n",implode($csvLoad)); // 행으로 나누어서 배열에 저장
   
   
    for($i=1;$i<count($csvArray)-1;$i++) { // 행으로 나눠진 배열 갯수 만큼 돌린다($enter[0]에는 필드 이름이 있으므로 $i는 1번 부터 시작하고 총 갯수는 $csvArray에서 1를 뺀다
   
    $field = split(",",addslashes($csvArray[$i])); //각 행을 콤마를 기준으로 각 필드에 나누고 DB입력시 에러가 없게 하기위해서 addslashes함수를 이용해 \를 붙인다
   
    $value = "'" . trim(implode("','",$field)) . "'"; //나누어진 각 필드에 앞뒤에 공백을 뺸뒤 ''따옴표를 붙이고 ,콤마로 나눠서 한줄로 만든다.
   
    $insertSQL = sprintf("INSERT INTO %s (%s) VALUES (%s)", $_POST['dbName'], $csvArray[0], $value); // php쿼리문을 이용해서 입력한다.
   
    mysql_select_db($database_csv, $csv); //$database_csv 와 $csv 함수는 각자 맞게 설정
    $Result = mysql_query($insertSQL, $csv) or die(mysql_error()); //$csv 함수는 각자 맞게 설정
    }
   
    unlink("copy.csv"); //입력이 된후 업로드된 파일을 삭제한다
   
    if($Result) {
    echo("<script>window.alert('New DB add!')</script>"); // 업로드가 성공적으로 되었으면 경고창을 띄워서 알려준다.
    }
}
?>
<html>
<head>
<title>CSV File to MySQL</title>
</head>

<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" name="form1">
<table width="200" border="0" cellpadding="5" cellspacing="0">
    <tr>
        <td>Database Name<br><input name="dbName" type="text" id="dbName"></td>
    </tr>
    <tr>
        <td>CSV file<br><input name="csvFile" type="file" id="csvFile"></td>
    </tr>
    <tr>
        <td><input type="submit" name="Submit" value="Submit"></td>
    </tr>
</table>
</form>
</body>
</html> 
반응형