2013-04-10 67 views
2

我有一個csv文件的列表,我想使用codeigniter將其導入到mysql數據庫中。如何使用codeigniter將CSV導入到mysql

我試過$this->load->library('getcsv');庫,但是如何導入csv而不需要上傳CSV文件到服務器,我的意思是上傳文件到一個臨時位置,比如PHP的純代碼。

有什麼想法?

例子:

我想是這樣的。

HTML:<input type="file" name="csv" />

到一個臨時串

笨:$this->input->upload['tmp_name']

回答

1

我給確切答案此。看看我的這個問題解決方案的答案。

這將生成CSV格式的報告。

Reports in Codeigniter

,這將告訴你如何閱讀和傾倒的CSV文件。

Codeigniter REST CSV import to mysql

+0

您的解決方案似乎很好,但是如何將CSV上傳到臨時位置等並使用它? – 2013-04-10 16:34:28

+0

爲此,您將不得不使用文件上傳 – 2013-04-10 19:24:21

0

試試這個:

數據庫:

SET FOREIGN_KEY_CHECKS=0; 
DROP TABLE IF EXISTS `contacts`; 
CREATE TABLE `contacts` (
    `contact_id` int(11) NOT NULL auto_increment, 
    `contact_first` varchar(255) character set latin1 default NULL, 
    `contact_last` varchar(255) character set latin1 default NULL, 
    `contact_email` varchar(255) character set latin1 default NULL, 
    PRIMARY KEY (`contact_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

import.php ::

<?php 

//connect to the database 
$connect = mysql_connect("localhost","username","password"); 
mysql_select_db("mydatabase",$connect); //select the table 
// 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    do { 
     if ($data[0]) { 
      mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
       ( 
        '".addslashes($data[0])."', 
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

    //redirect 
    header('Location: import.php?success=1'); die; 

} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Import a CSV File with PHP & MySQL</title> 
</head> 

<body> 

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?> 

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    Choose your file: <br /> 
    <input name="csv" type="file" id="csv" /> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

</body> 
</html> 

//get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    do { 
     if ($data[0]) { 
      mysql_query("INSERT INTO contacts_tmp (contact_first, contact_last, contact_email) VALUES 
       (
        '".addslashes($data[0])."', 
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 
0

首先更改route.php的default_controller值處於內部配置夾。

$ route ['default_controller'] =「csv」;

創建一個控制器csv.php

<?php 
class csv extends CI_Controller 
{ 
    public $data; 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('csv_model'); 
    } 
    function index() 
    { 
     $this->load->view('uploadCsvView',$data); 
    } 
    function uploadData() 
    { 
     $this->csv_model->uploadData(); 
     redirect('csv'); 
    } 
} 
?> 

,並創建一個模型csv_model.php

<?php 
class csv_model extends CI_Model 
{ 
    function __construct() 
    { 
     parent::__construct(); 
    } 
    function uploadData() 
    { 
     $count=0; 
     $fp = fopen($_FILES['userfile']['tmp_name'],'r') or die("can't open file"); 
     while($csv_line = fgetcsv($fp,1024)) 
     { 
      $count++; 
      if($count == 1) 
      { 
       continue; 
      }//keep this if condition if you want to remove the first row 
      for($i = 0, $j = count($csv_line); $i < $j; $i++) 
      { 
       $insert_csv = array(); 
       $insert_csv['id'] = $csv_line[0];//remove if you want to have primary key, 
       $insert_csv['empName'] = $csv_line[1]; 
       $insert_csv['empAddress'] = $csv_line[2]; 

      } 
      $i++; 
      $data = array(
       'id' => $insert_csv['id'] , 
       'empName' => $insert_csv['empName'], 
       'empAddress' => $insert_csv['empAddress'], 
      $data['crane_features']=$this->db->insert('tableName', $data); 
     } 
     fclose($fp) or die("can't close file"); 
     $data['success']="success"; 
     return $data; 
    } 
} 

,最後創建一個視圖uploadCsvView。PHP

<form action="<?php echo site_url();?>csv/uploadData" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <table> 
     <tr> 
      <td> Choose your file: </td> 
      <td> 
       <input type="file" class="form-control" name="userfile" id="userfile" align="center"/> 
      </td> 
      <td> 
       <div class="col-lg-offset-3 col-lg-9"> 
        <button type="submit" name="submit" class="btn btn-info">Save</button> 
       </div> 
      </td> 
     </tr> 
    </table> 
</form> 

,創造,其中數據將被插入MySQL表:

CREATE TABLE tableName(
    id INT, 
    empName VARCHAR(100) , 
    empAddress VARCHAR(100), 
    PRIMARY KEY (id) 
) 

而且最重要的一點:

的MySQL和CSV文件都應該是相同的

示例csv數據位於以下鏈接中:

https://drive.google.com/file/d/0B-OuLrage4PpUmtKNkhuS1JrSkE/view?usp=sharing