我有一个csv文件列表,我希望使用codeigniter将其导入mysql db。
我尝试了$this->load->library('getcsv');
库,但是如何在不将CSV文件上传到服务器的情况下导入csv,我的意思就是将文件上传到临时位置,就像纯PHP编码一样。
有什么想法吗?
示例:
我想要这样的东西。
HTML: <input type="file" name="csv" />
到临时字符串
Codeigniter: $this->input->upload['tmp_name']
答案 0 :(得分:2)
我给出了完全答案。看看我的答案,找出你的问题的解决方案。
这将生成CSV格式的报告。
这将告诉您如何读取和转储csv文件。
答案 1 :(得分: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,",","'"));
//
答案 2 :(得分:0)
首先更改位于config文件夹中的route.php中的default_controller值。
$ route [&#39; default_controller&#39;] =&#34; csv&#34;;
将控制器创建为 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