2012-08-09 2 views
3

다른 게시물이 비슷한 것을 알고 있지만 모든 사람들이 PHPMyAdmin에서 직접 MySQL로 가져 오는 것이 좋습니다. (어느 것이 완벽하게 작동 하나 가져올 필요가 있습니다. HTML 폼을 통해 PHP에서 MySQL로 PHP를 호출합니다.PHP 코드와 HTML 양식을 사용하여 MySQL에 Excel (.csv) 가져 오기

파일을 수집하는 HTML 폼을 가지고 싶습니다. 그 파일을 PHP 스크립트에 전달하고 PHP 함수를 호출 할 수 있는지 알고 싶습니다. 그 쉼표의 MySQL에 .CSV 파일을 delimeted 변환하고 데이터베이스에 추가합니다.

또는 각 레코드를 라인으로 파일 라인을 구문 분석하고 추가 할 수있는 유일한 방법입니다?

+0

PHPMyAdmin은 HTML 양식과 PHP를 사용합니다. 그들이 그것을 어떻게하는지보기 위하여 그것의 근원을 읽으십시오. –

+0

http://code.google.com/p/php-csv-parser/에서보십시오 .csv가 배열로 변환됩니다. 그런 다음 배열을 반복하고 INSERT 쿼리를 구성 할 수 있습니다. – JDavis

답변

7

아직 테스트하지는 않았지만 작동하지 않는 이유는 없습니다.

<?php 

if (isset($_FILES['userfile'])) 
{ 
    $csv_file = $_FILES['userfile']['tmp_name']; 

    if (! is_file($csv_file)) 
    exit('File not found.'); 

    $sql = ''; 

    if (($handle = fopen($csv_file, "r")) !== FALSE) 
    { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
     { 
      $sql .= "INSERT INTO `table` SET 
      `column0` = '$data[0]', 
      `column1` = '$data[1]', 
      `column2` = '$data[2]'; 
      "; 
     } 
     fclose($handle); 
    } 

    // Insert into database 

    //exit($sql); 
    exit("Complete!"); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>CSV to MySQL Via PHP</title> 
</head> 
<body> 
    <form enctype="multipart/form-data" method="POST"> 
    <input name="userfile" type="file"> 
    <input type="submit" value="Upload"> 
    </form> 
</body> 
</html> 

물론 데이터를 먼저 확인해야합니다.

+0

+1 매우 도움이되었습니다 :) –

+0

다른 데이터베이스에 대해서는 약간의 수정이 필요합니다. 수출하는 법을 조언 해 줄 수 있니? 나는 매우 감사 할 것입니다. – Kasnady

1

우리는 얼마 전에 이것을 사용했으며, 정상적으로 작동합니다. 파일 및 디렉토리 권한을 감시하십시오. csv_upload_mysql_conf.inc는 DB 링크 일뿐입니다. 이렇게하면 여러 파일을 한 번에 파싱하여 가져 오기라는 테이블에 넣을 수 있습니다. 그에 따라 업데이트하십시오. 코드에서

<?php 

/* The conf file */ 
include_once "csv_upload_mysql_conf.inc"; 

$php_self = $_SERVER['PHP_SELF']; 
$file_open = 0; 
$file_exts = array 
('csv'); 

#Our Form..... 

$form = <<< EOFFORM 
<div align='center' style='border: 1px solid #CCC; background-color: #FAFAFA;padding: 10px; color: #006699; width: 620px; font-family: palatino, verdana, arial, sans-serif;' > 
<table align=center style='border: 1px solid #CCC; background-color: #FFF;padding: 20px; color: #006699;' cellspacing=1><tbody> 
<tr><td> 
<form enctype='multipart/form-data' action='$php_self' method='post'><input type='hidden' name='MAX_FILE_SIZE' value='2000000' /><input type='hidden' name='selected' value='yes' /> Selected file: <input name='userfile[]' type='file' id='userfile[]' multiple='' onChange='makeFileList();' /><br /><br /><input type='submit' value='Upload CSV' /> 
</td></tr></tbody></table></div> 
<p> 
     <strong>Files You Selected:</strong> 

    </p> 
    <ul id="fileList"><li>No Files Selected</li></ul> 
<script type='text/javascript'> 
     function makeFileList() { 
      var input = document.getElementById('userfile[]'); 
      var ul = document.getElementById('fileList'); 
      while (ul.hasChildNodes()) { 
       ul.removeChild(ul.firstChild); 
      } 
      for (var i = 0; i < input.files.length; i++) { 
       var li = document.createElement('li'); 
       li.innerHTML = input.files[i].name; 
       ul.appendChild(li); 
      } 
      if(!ul.hasChildNodes()) { 
       var li = document.createElement('li'); 
       li.innerHTML = 'No Files Selected'; 
       ul.appendChild(li); 
      } 
     } 
    </script> 
EOFFORM; 

#End Form; 

if(!isset($_POST['selected'])){ 

      echo "$form"; 

     } 

     elseif($_POST['selected'] == "yes"){ 
      $uploaddir = 'uploads/'; 
      if(count($_FILES['userfile']['name'])) { 
       foreach ($_FILES['userfile']['name'] as $key => $error) { 
       if ($error == UPLOAD_ERR_OK) { 
        $tmp_name = $_FILES['userfile']['tmp_name'][$key]; 
        $name = $_FILES['userfile']['name'][$key]; 
        $f_type = trim(strtolower(end(explode('.', $name)))); 
        if (!in_array($f_type, $file_exts)) die("Sorry, $f_type files not allowed"); 
       } 
     $uploadfile = $uploaddir . $name; 
     if (! file_exists($uploadfile)) { 
      if (move_uploaded_file($tmp_name, $uploadfile)) { 
       print "File is valid, and was successfully uploaded. "; 
       $flag = 1; 
       chmod($uploadfile, 0777); 
       } else { 
       print "File Upload Failed. "; 
       $flag = 0; 
       } 

     $flag = 1; 

     if ($flag == 1) { 
     echo "\n parsing Data..."; 
     flush(); 

     if (file_exists($uploadfile)) { 
     $fp = fopen($uploadfile, 'r') or die (" Can't open the file"); 
     $fileopen = 1; 
     $length = calculate_length($uploadfile); 
     } 

     $replace = "REPLACE"; 
     $field_terminater = ","; 
     $enclose_option = 1; 
     $enclosed = '"'; 
     $escaped = '\\\\'; 
     $line_terminator = 1; 
     $local_option = 1; 

     $sql_query  = 'LOAD DATA'; 

      if ($local_option == "1") { 
       $sql_query  .= ' LOCAL'; 
      } 

      $sql_query  .= ' INFILE \'' . $uploadfile . '\''; 
      if (!empty($replace)) { 
       $sql_query .= ' ' . $replace; 
      } 
      $sql_query  .= ' INTO TABLE ' . "`import`"; 
      if (isset($field_terminater)) { 
       $sql_query .= ' FIELDS TERMINATED BY \'' . $field_terminater . '\''; 
      } 
      if (isset($enclose_option) && strlen($enclose_option) > 0) { 
       $sql_query .= ' OPTIONALLY'; 
      } 
      if (strlen($enclosed) > 0) { 
       $sql_query .= ' ENCLOSED BY \'' . $enclosed . '\''; 
      } 
      if (strlen($escaped) > 0) { 
       $sql_query .= ' ESCAPED BY \'' . $escaped . '\''; 
      } 
      if (strlen($line_terminator) > 0){ 
       $sql_query .= ' LINES TERMINATED BY \'' . '\r\n' . '\''; 
      } 

     $result = mysql_query ($sql_query); 
     echo mysql_error() ; 

     if(mysql_affected_rows() > 1) { 
       echo " <div align=center><b><font color=#66CC33>The csv data was added.</font></div> "; 
     } 
     else { 
      error_log(mysql_error()); 
      echo " <div align=center><b><font color=#E96B10> Couldn't enter the data to db </font></div>"; 
     } 

     if ($file_open ==1) { 
     fclose($fp) or die("Couldn't close the file"); 
     } 
    } 
} 
} 
echo "<meta http-equiv='refresh' content='0; url=index.php'>"; 
} 
} 

function calculate_length($fp) { 
    $length = 1000; 
    $array = file($fp); 
    for($i=0;$i<count($array);$i++) 
    { 
     if ($length < strlen($array[$i])) 
     { 
      $length = strlen($array[$i]); 
     } 
    } 
    unset($array); 
    return $length; 
} 

?> 
+0

90 %는 내 코드가 아니며이를 그대로 주장하지 않습니다. 자신의 위험을 감수하면서 사용하십시오 ... Google 검색 결과 전면에 있습니다. 나는 약간의 개선이 이루어질 수 있다고 확신한다. 또한, 우리의 게으른 파일 확장 배열을 변명하십시오. 때때로 txt 파일을 허용하기 때문에 배열 코드를 하나의 값으로 남겨 둡니다. –

1

모든 것은 괜찮지 만 실수는 당신이 테이블에 데이터를 삽입하여 mysql_query를 사용하지 않습니다. 스크립트에서 MySQL 쿼리가 실행되지 않습니다. 수정 된 코드는 다음과 같습니다.

<?php 

if (isset($_FILES['userfile'])) 
{ 
    $csv_file = $_FILES['userfile']['tmp_name']; 

    if (! is_file($csv_file)) 
    exit('File not found.'); 

    $sql = ''; 

    if (($handle = fopen($csv_file, "r")) !== FALSE) 
    { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
     { 
      $sql = mysql_query("INSERT INTO `table` SET 
      `column0` = '$data[0]', 
      `column1` = '$data[1]', 
      `column2` = '$data[2]'; 
      "); 
     } 
     fclose($handle); 
    } 

    // Insert into database 

    //exit($sql); 
    exit("Complete!"); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>CSV to MySQL Via PHP</title> 
</head> 
<body> 
    <form enctype="multipart/form-data" method="POST"> 
    <input name="userfile" type="file"> 
    <input type="submit" value="Upload"> 
    </form> 
</body> 
</html> 
+0

나는 그의 질문에 답할 필요가 없기 때문에 실제로 데이터베이스에 데이터를 넣기를 원하지 않았다. 간단히 실행하고 테스트하여 쿼리가 어떻게 보이는지 확인할 수있는 예제를 보여주고 싶었습니다. 나는 당신이 그것을 실행하려고한다면 당신의 예제가 실패 할 것이라고 확신한다. 이상적으로 당신은 일련의 INSERT INTO 문을 연결하는 대신에'PDO'와'bindParam'을 사용할 것입니다. – JDavis