PHP实现CSV文件导入和导出
我们首先准备MySQL数据表,假设有一个记录学生信息的表学生,以及ID、姓名、性别和年龄记录学生的姓名、性别、年龄和其他信息。
创建表(学生)
` ID ` int(11)不为空auto_increment,
`名字` varchar(50)不为空,
`性` varchar(10)不为空,
`年龄` SmallInt(3)不为空的默认'0',
主键(id)
= MyISAM引擎默认的字符集utf8);
我们还需要一个HTML交互页面来放置导入表单和导出按钮。
请选择要导入的CSV文件:<输入类型提交
类=按钮value=csv>
<输入type=按钮class=按钮value=导出CSVonclick=窗口位置。href =do.php
操作=导出>
在选择当地的CSV文件,单击导入,将它做的。phpaction =进口加工,并单击导出按钮,然后请求地址做。phpaction =出口出口数据。
1。csv
do.php需要处理进出口根据得到的参数的过程,和PHP的结构如下:
include_once(连接。PHP); / /数据库连接
行动=美元_get美元{ 'action};
如果($行动= = 'import / /)为CSV
{
进口/待遇
} elseif($行动= = 'export ')/导出CSV
{
导出处理
}
导入CSV进程:检查CSV文件(被忽略的合法性)读取并解析在字段周期中打开的CSV文件>字段值>批量添加到数据表中,完成。
如果($行动= = 'import){ / /成CSV
文件名=美元美元_files { } { } 'tmp_name '文件';
如果(emptyempty($文件名))
{
请选择您要导入的CSV文件!;
出口;
}
为处理= fopen($文件名,R');
结果= input_csv美元($处理); / / CSV
$len_result = count ($result);
如果($ len_result = = 0)
{
没有数据!;
出口;
}
为($我= 1;$我<< len_result美元; / / $ i++)循环获取字段值
{
$name = iconv('gb2312 ','utf-8,$结果{ $我} { 0 }); / /中文转码
性别= iconv('gb2312美元,美元'utf-8 ',结果{ $我} { 1 });
年龄=结果$ { 2 } };
data_values美元=($名','性'的美元,美元的时代),;
}
data_values美元= substr(data_values美元,0,1); / /删除最后一个逗号
Fclose($处理 / /关闭);指针
查询= mysql_query美元(插入学生(姓名、性别、年龄)值data_values美元); / /批量插入数据表
如果($查询)
{
导入成功!;
其他{ }
回波导入失败!;
}
}
需要注意的是,PHP fgetcsv函数可以很容易地处理CSV文件,使用这个函数从文件指针中读取一行并解析CSV字段。以下函数解析CSV文件字段和数组的形式返回。
功能input_csv($处理)
{
($ =数组);
$ = 0;
而($data = fgetcsv(合处理,10000))
{
$ =计数($ data);
($ i = 0;$ i;
{
$;
}
美元+;
}
退回美元;
}
此外,在导入数据库时,我们使用批插入而不是插入一个bar。因此,在构建SQL语句时,我们需要稍微处理它并查看代码。
2。导出CSV
我们知道,CSV文件是一个由逗号分隔的纯文本文件,你可以用Excel打开它,,XLS相同。
CSV导出处理过程:学生信息表记录字段信息构建周期>逗号分隔的集标头信息>导出文件(下载)到本地
…
} elseif($行动= = 'export ')/导出CSV
{
结果= mysql_query美元(SELECT * FROM学生订单ID ASC );
姓名,性别,年龄;
$str = iconv('utf-8 ','gb2312,$str);
而($行= mysql_fetch_array($结果))
{
$name = iconv('utf-8 ','gb2312 ',$行{ 'name' }); / /中文转码
合性= iconv('utf-8 ','gb2312 ',' } { $行'sex);
$ $ - $名称。
}
为文件名=日期('ymd。.csv); / /设置文件名
export_csv($文件名,$str); / /出口
}
要将数据导出到本地,需要修改标头信息。代码如下:
功能export_csv($文件名,$数据)
{
页眉(内容类型:文本);
标题(内容配置:附件;文件名);
头('cache-control:must-revalidate,后检查= 0,预先检查= 0);
头('expires:0);
头('pragma:公众);
回波数据;
}
注意进出口过程中,因为我们是统一采用UTF-8编码,我们必须记住转码的汉字,否则,我们可能会有中文乱码情况。
以上是本文的全部内容,希望本文对大家的PHP程序设计有所帮助。