APP下载

网络在线考试系统中数据导入导出的PHP实现

2016-11-02杨鑫

电脑知识与技术 2016年18期
关键词:导入

杨鑫

摘要:在信息系统的开发过程中,经常要将电子表格导入到网站数据库表,有时候还需要将数据库表中的内容导出到Excel电子表格。该文介绍了一种基于PHP的电子表格导入导出技术:将电子表格保存为CSV格式,再读出每行数据,分隔每行数据为不同的字段,再把字段写入数据库表;此外,PHP还提供了写Excel电子表格的功能。

关键词:Excel电子表格;MySql数据表;导入;导出

中图分类号:TP317 文献标识码:A 文章编号:1009-3044(2016)18-0091-02

PHP Implementation of Data Import and Export in the Online Examination System

YANG Xin

(Department of Computer Science,Wuhan Polytechnic, Wuhan 430074, China)

Abstract: In the development process of information system, often need to import the spreadsheet to the website database table, and sometimes also need to export the contents of the database table to Excel electronic form. This paper introduces a kind of based on PHP spreadsheet import and export technology: save the spreadsheet as a file in CSV format, read out data for each line, separating each row of data for different field, then the field is written as a database table; in addition, PHP also provides functionality to write Excel spreadsheet.

Key words:Excel table; MySQL table; import; export

本网络在线考试系统采用LAMP(Linux+Apache+MySQL+PHP)平台。采用B/S架构,根据武汉职业技术学院精品资源共享课《管理信息系统开发》在线考试系统需求,本考试系统支持单选题、多选题、判断题等客观题题型,支持将考生信息和试题从Excel中导入到系统(MySQL数据库),还支持将成绩信息(MySQL数据表)导出到Excel电子表格。

1 从Excel电子表格导入到MySQL数据表

将电子表格Excel导入到MySQL数据库表。为了最简洁地把问题讲述清楚,我们以最简单的电子表格stu.xls为例,stu.xls中保存中考生的信息,包括学号、姓名和成绩,其中考前成绩为空,考试结束后成绩不为空。

1.1 电子表格转变为纯文本格式

第一步,使用办公软件Excel将电子表格stu.xls另存为stu.csv格式,如图1所示。CSV格式实际上是一种以逗号为分隔的纯文本格式,如果使用记事本打开stu.csv文件则显示为如图2的纯文本格式。

1.2 纯文本文件的分割

第二步:分割纯文本文件stu.csv。因为该文件是纯文本文件,容易想到将该文件分割为不同的行,每一行就是一个考生信息的记录(除首行是标题信息外)。然后再用逗号将每一行继续分割为不同的字段值。在php中提供了字符串分割函数explode。该函数的功能是分割字符串为字符型数组。例如:执行语句$st=explode(“,”,”01,刘备”)后,可以得到$st[0]=”01”,$st[1]=”刘备”。

关键代码为:

$content=file_get_contents("cj.csv");

$temp = explode("\r\n",$content);

$content就是文本文件中的内容,包含特殊字符回车和换行。因此可以考虑使用回车和换行字符将$content分割为字符型数组。上面两行代码执行之后,$temp[0]=”学号,姓名,成绩”;$tem[1]=”01,刘备”;$temp[2]=”02,关羽”;$temp[3]=”03,张飞”;$temp[4]=”04,赵云”;

1.3 继续分割记录,并写入MySQL数据库表

第三步:继续分割文本文件的每一行。即分割$temp数组的每一个元素。使用逗号来分割。分割得到的结果是不同的字段,例如可以得到“01”、“刘备”、“03”、“赵云”等等信息。然后顺便写入到MySQL数据库表中。关键代码为:

$conn=mysql_connect("127.0.0.1","root","root") or die ("connect mysql false");

mysql_select_db("db_chengji", $conn);

mysql_query("set names utf8");

for ($j=1;$j

{

$st=explode(",",$temp[$j]);

$sql3="insert into tb_cj (xuehao,xingming,score) values( '".$st[0]."','".$st[1]."','-1')";

mysql_query($sql3,$conn);

}

上面的代码,将Excel表中的内容分割为多行,每一行保存在数组$temp中,再将字符型数组的每一个元素分割为单个的字段信息。

考虑到标题无需导入到数据库表,因此上面的循环变量$j从1开始(有意跳过0,忽略标题信息),再将记录插入MySQL数据表的时候,将成绩项用字符串-1来填充(-1表示考试前)。

Excel文件stu.csv导入到数据表tb_cj后结果如图3所示。

2 从MySQL数据表导出到Excel电子表格

考试后需要将考生的成绩导出到Excel 文件。导出为Excel文件非常简单,只需要把成绩显示在html的table中,然后在php文件的前面加上下面两个语句即可:

header("Content-type:application/vnd.ms=excel");

header("Content-Disposition:attachment;filename=cj.xls");

完整代码如下:

<?php

header("Content-type:application/vnd.ms=excel");

header("Content-Disposition:attachment;filename=cj.xls");

$conn=mysql_connect("127.0.0.1","root","root") or die ("connect mysql false");

mysql_query("set names utf8");

$db_selected = mysql_select_db("db_chengji", $conn);

$sql=mysql_query("select * from tb_cj",$conn);

?>

<?php while($info=mysql_fetch_array($sql)){ ?>

<?php } ?>

<?php echo "学生成绩表";?>

考号姓名分数
<?php echo $info[1];?><?php echo $info[2];?><?php echo $info[3];?>

导出后的Excel文件如图4所示:

备注:图中0分、89分和78分是考试成绩,而-1则表示该生没有参加考试。

3 结束语

关于导入:可以采用通用式的方法。比如导入考试试题的时候,有些题目有两个选项(判断题)有些题目是四个选项(单选题),有些则是五个选项,可以采用文件域打开Excel 文件,并对打开的文件的数据进行自动判断,在导入文件中的数据进行检测,筛选,等等。

关于导出:因为html中的表格table是可以设置为各种各样的,导出后的Excel 文件会与table表格完全一致,因此,完全可以将最高分、最低分、不及格分数、不及格人数、平均分,缺考考生姓名等以不同颜色字体显示出来,还可以详细地分析成绩并以饼图的形式显示出来,因为篇幅所限,本文不做介绍。

参考文献:

[1] 软件开发技术联盟.PHP开发实例大全[M].北京:清华大学出版社,2016.

[2] 徐康明, 辛洪郁.实战突击PHP项目开发案例整合[M]. 2版.北京:电子工业出版社, 2014.

猜你喜欢

导入
浅谈高中化学教学导入的策略
高效高中地理课堂的有效构建
如何打造有效的小学管理工作
关于中学语文“导入”教学设计的几点思考