Mysql 如何使用codeigniter框架在jquery中读取csv文件
假设这是我的csv文件Mysql 如何使用codeigniter框架在jquery中读取csv文件,mysql,codeigniter,csv,Mysql,Codeigniter,Csv,假设这是我的csv文件 fileempId,lastName,firstName,middleName,street1,street2,city,state,zip,gender,birthDate,ssn,empStatus,joinDate,workStation,location,custom1,workState,salary,payFrequency,FITWStatus,FITWExemptions,DD1Routing,DD1Account,DD1Amount,DD1AmountC
fileempId,lastName,firstName,middleName,street1,street2,city,state,zip,gender,birthDate,ssn,empStatus,joinDate,workStation,location,custom1,workState,salary,payFrequency,FITWStatus,FITWExemptions,DD1Routing,DD1Account,DD1Amount,DD1AmountCode,DD1Checking,DD2Routing,DD2Account,DD2Amount,DD2AmountCode,DD2Checking
1,Dela Cruz,Juano,Santos,,,,,,1,,,Part Time Internship,, asd Division, Makati,one, asd,150,Bi Weekly,Not Applicable,100,,,,,,1234,9876,100,SAVINGS,BLANK
3,Palogan,Ralph,,,,,,,1,11-Mar-11,,Full Time Contract,2-Mar-11, sdf Department, pasay,, ,,,Not Applicable,,,,,,,,,,, 5,San,Goku,,,,hidden leaf,,,1,11-Mar-11,,,,,,,,,,Not Applicable,0,,,,,,,,,,
这是我的表格
<label>Choose File:</label><font color="#FF0000">*</font>
<input type="file" name="file" id="file" />
<input type="button" id="importButton" value="Import" name="importButton" />
我的图书馆
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class csvreader {
var $fields; /** columns names retrieved after parsing */
var $separator = ';'; /** separator used to explode each line */
var $enclosure = '"'; /** enclosure used to decorate each field */
var $max_row_size = 4096; /** maximum row size to be used for decoding */
function parse_file($p_Filepath) {
$file = fopen($p_Filepath, 'r');
$this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure);
$keys_values = explode(',',$this->fields[0]);
$content = array();
$keys = $this->escape_string($keys_values);
$i = 1;
while( ($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false ) {
if( $row != null ) { // skip empty lines
$values = explode(',',$row[0]);
if(count($keys) == count($values)){
$arr = array();
$new_values = array();
$new_values = $this->escape_string($values);
for($j=0;$j<count($keys);$j++){
if($keys[$j] != ""){
$arr[$keys[$j]] = $new_values[$j];
}
}
$content[$i]= $arr;
$i++;
}
}
}
fclose($file);
return $content;
}
function escape_string($data){
$result = array();
foreach($data as $row){
$result[] = str_replace('"', '',$row);
}
return $result;
}
}
我犯了一个错误
遇到一个PHP错误
严重性:警告
消息:fopenexport 1.csv:无法打开流:没有此类文件或目录
文件名:libraries/csvreader.php
有人能帮我吗 我使用此库将数组转换为其他数据格式,反之亦然 在那里可以找到library/class Format Format.php,您可以使用它将CSV转换为数组,然后将其保存到数据库中。此类还支持其他格式: xml–几乎任何编程语言都可以读取xml json–适用于JavaScript和越来越多的PHP应用程序。 csv–使用电子表格程序打开 html–一个简单的html表 php–可以评估的php代码的表示形式 serialize–可以在PHP中取消序列化的序列化数据 编辑: 此库在CSV上工作,每行和每列上都有分隔符\n,您可以这样使用它:
$this->load->library('format');
$string_csv = "YOUR CSV";
$result = $this->format->factory($string_csv, 'csv')->to_array();
var_dump($result);
就这么简单。但是,正如我上面所说的,如果您有另一个分隔符,那么您必须根据需要调整库。以下是将CSV转换为阵列的主要功能:
function _from_csv($string)
{
$data = array();
// Splits
$rows = explode("\n", trim($string));
$headings = explode(',', array_shift($rows));
foreach ($rows as $row)
{
// The substr removes " from start and end
$data_fields = explode('","', trim(substr($row, 1, -1)));
if (count($data_fields) == count($headings))
{
$data[] = array_combine($headings, $data_fields);
}
}
return $data;
}
编辑2:
我的示例将使用此标准CSV格式:
Heading1, Heading2, Heading3
"1","John","London"
"2","Brian","Texas"
根据您的评论,您实际上希望首先将CSV文件上载到服务器,然后检查CSV字段/标题是否与要插入行的数据库表字段之一匹配,下面是我制作的示例代码: 基于此的CSV阅读器进行了一些调整:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* CSVReader Class
*
* $Id: csvreader.php 147 2007-07-09 23:12:45Z Pierre-Jean $
*
* Allows to retrieve a CSV file content as a two dimensional array.
* The first text line shall contains the column names.
*
* @author Pierre-Jean Turpeau
* @link http://www.codeigniter.com/wiki/CSVReader
*/
class CSVReader {
var $fields; /** columns names retrieved after parsing */
var $separator = ','; /** separator used to explode each line */
/**
* Parse a text containing CSV formatted data.
*
* @access public
* @param string
* @return array
*/
function parse_text($p_Text) {
$lines = explode("\n", $p_Text);
return $this->parse_lines($lines);
}
/**
* Parse a file containing CSV formatted data.
*
* @access public
* @param string
* @return array
*/
function parse_file($p_Filepath) {
$lines = file($p_Filepath);
return $this->parse_lines($lines);
}
/**
* Parse an array of text lines containing CSV formatted data.
*
* @access public
* @param array
* @return array
*/
function parse_lines($p_CSVLines) {
$content = FALSE;
foreach( $p_CSVLines as $line_num => $line ) {
if( $line != '' ) { // skip empty lines
$line = trim($line);
$elements = explode($this->separator, $line);
if( !is_array($content) ) { // the first line contains fields names
$this->fields = $elements;
$content = array();
} else {
$item = array();
foreach( $this->fields as $id => $field ) {
if( isset($elements[$id]) ) {
$item[$field] = $elements[$id];
}
}
$content[] = $item;
}
}
}
return $content;
}
/**
* Get fields
*/
public function get_fields(){
return $this->fields;
}
}
下载完整的样本。您可以在文件夹上载中找到CSV文件的示例。我已经尝试了您的CSVReader功能。它给了我完美的结果,根据我的需要。我还喜欢您的想法,即检查CSV字段/标题是否与要插入行的数据库表字段之一匹配。它给出的结果数组如下所示
Array
(
[0] => Array
(
[Years] => 1888
[Make1] => Acura
[Make2] => Honda
[Make] => Honda
[] => Honda
[Makes] => Toyota
)
Array
(
[0] => Array
(
[Years,Make1,Make2,Make,,Makes,Make] => 1888,Acura,Honda,Toyota,Honda,Toyota,Honda
)
)
我也在这个位置尝试过CSVReader library。
但它给出的结果数组的值由逗号内爆,如下所示
Array
(
[0] => Array
(
[Years] => 1888
[Make1] => Acura
[Make2] => Honda
[Make] => Honda
[] => Honda
[Makes] => Toyota
)
Array
(
[0] => Array
(
[Years,Make1,Make2,Make,,Makes,Make] => 1888,Acura,Honda,Toyota,Honda,Toyota,Honda
)
)
现在,在您的CSVReader函数中,我已经对CSV文件的第一行名称进行了更改,末尾带有空格。但在此之后,在CI控制器中,当我使用array_key_exists'column_name'、$csvdata检查CSV文件中是否存在字段/标题/列_name时,它返回false/none,因为列_name字段末尾有空格。所以我更新了你的代码
请参考下面更新的代码,并给我任何建议,如果有的话
编辑:-
对CSVReader文件中parse_lines函数中的foreach循环进行更改=>
foreach( $this->fields as $id => $field ) {
//echo $id;
//echo $field;
//In CSV File, trim(remove both end whitespaces) the first line which contains fields names
$field = trim($field);
if( isset($elements[$id]) )
{
$item[trim($field)] = trim($elements[$id]);//In CSV File, trim all the file data
}
}
你试过谷歌吗。有一个好的source@webghost你的代码在哪里,在你上面的问题中吗?您的CSV示例很难转换,因为每行的分隔符都是空格。请查看我的CSV示例。@SubRedi已编辑了上面的代码,,。您能看一下吗,…,如果我在哪一部分出错了。,,。你能修改我的代码吗,,。排除了上面的示例csv,。。请看我编辑的帖子,,。三硝基甲苯advance@webghost很抱歉迟了答复。根据您编辑的问题,您不能直接从$file=$this->input->post'file'读取文件;因为它尚未保存在您的服务器上。您需要先将文件上载到服务器,然后使用csvreader库开始读取。我建议您首先在服务器上创建虚拟CSV文件,而不上载它,以查看您的CSV读取器是否如您所期望的那样工作。然后,您可以在csv库工作后添加上载功能。如何做到这一点,,。或者您可以给我一些示例代码,说明如何使用codeigniter中的jquery上载csv文件。,,,。请检查我的错误是文件必须上载的路径。,,。我的配置文件是。,.$config['base\u url']=localhost/myhr;,。,。上传路径是什么?我的是$config['upload_path']='./uploads/';我已经创建了文件夹上载。,。我收到一个错误,上传路径似乎无效@webghost抱歉,对于延迟回复,请尝试将$config['base_url']设置为空,并让CI猜测安装的协议、域和路径。如果您在CI上使用.htaccess mod_rewrite,您还应该将$config['index_page']设置为空白。是的,这可以工作,但如何将其集成到我的系统,,。我已经在基本url中说明了我的配置,如何解决这个问题,请帮助,。,tnx@webghost你的问题到底是什么?已经有您的示例代码。你试过了吗?我的意思是样品不能直接满足你的需要,你必须在那里做一些调整。
Array
(
[0] => Array
(
[Years,Make1,Make2,Make,,Makes,Make] => 1888,Acura,Honda,Toyota,Honda,Toyota,Honda
)
)
foreach( $this->fields as $id => $field ) {
//echo $id;
//echo $field;
//In CSV File, trim(remove both end whitespaces) the first line which contains fields names
$field = trim($field);
if( isset($elements[$id]) )
{
$item[trim($field)] = trim($elements[$id]);//In CSV File, trim all the file data
}
}