最近要用到excel的导入功能,我自己需要页面有文件的提交,然后转入后台进行处理,之后在前台页面显示结果就好了,上网找了一下,最终根据一位网友的分享,结合自己的实际情况写了如下文章:
显示页面index.php
<?php
/**
* 导入excel的显示层
* 2014/7/24 @author Lee
*/
?>
<form action="savetomysql.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000000"> <!-- 上传大小不超过2M value="2000000"-->
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
<div id="show" name="show"></div>
后台处理:savetomysql.php
<?php
header('content-type:text/html;charset=utf-8');
/*
* excel导入到mysql过程
* author lee
* web http://www.diao48.com
*/
new saveToMysql();
class saveToMysql {
var $excPath ; //excel表的路径
var $name; //要上传的文件的名字
var $type; //要上传的文件类型
var $size; //要上传的文件大小
var $tmp_name; //要上传的文件路径
var $server_name ; //数据库服务器
var $user ; //数据库用户名
var $password ; //数据库密码
var $database ; //选择的数据库名
var $table ; //表名
var $conn ; //数据库连接对象
/*
* 导入类的构造函数
*/
function __construct() {
$this->conn();
$this->tbname='member'; //表名
$this->excPath = './excel/Book1.xls'; //excel文件地址
$this->getFile();
if ($this->impExcel()) {
exit('ok');
}
}//end func construct
/*
* 从提交的表单中获取文件的信息,关键是获取文件的临时存放路径
*/
function getFile(){
$resuArr = $this->upload();
foreach ($resuArr as $key=>$value){
$this->$key = $resuArr[$key];
}//end foreach()
}//end func getFile
/*
* 读取excel文件内容,并导入到数据库中去
*/
function impExcel(){
/* 连接excel表(用法与access数据库类似) */
$conn=new com("adodb.connection");
$connstr="Driver={Microsoft Excel Driver (*.xls)};DBQ=".realpath("$this->tmp_name");//$this->tmp_name为excel的路径
//打开 book.xls 文件
$conn->open($connstr);
$sql="select * from [Sheet1$]";//Excel 表下面的选项卡
$rs=$conn->execute($sql);
/* 导入字段文件 */
$field_arr=array('id','name','pwd','pid','email');//数据库表中的字段名称
$field_str=implode(',',$field_arr);
/* 循环导入到MySQL数据库中 */
while(!$rs->eof){
$value='';
foreach($field_arr as $v){
$value .= "'".iconv('gb2312','utf-8',$rs->fields($v)->value)."',";
}
$sqls = "insert into ".$this->tbname."(".$field_str.") values(".trim($value,',').")";
$this->query($sqls); //把数据逐条插入数据库
$rs->movenext;//用在指针下移
}
echo "<script>alert('数据已成功导入到MySQL!');history.back();</script>";
}//end func impExcel()
/*
* 文件上传功能,通过从表单接收的文件信息,从而把文件Copy并保存到服务器的缓存文件中。
* 注:
* 该方法现在只能允许单个文件的上传
*/
function upload(){
if ($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}else{
return array(
"name"=>$_FILES["file"]["name"],
"type"=>$_FILES["file"]["type"],
"size"=>$_FILES['file']['size'],
"tmp_name"=>$_FILES['file']['tmp_name']
);
}//end if
}//end func upload
/*
* 连接数据库
*/
function conn(){
$this->server_name = "localhost";
$this->user = "root";
$this->password = "000111";
$this->database = "yxlego";
$this->conn = mysql_connect($this->server_name, $this->user, $this->password ) or die("数据库连接出错!");
mysql_select_db($this->database); //选择数据库
}//end func conn()
//执行函数
function query($sql){
$result = mysql_db_query($this->database, $sql, $this->conn);
return $result ;
}//end func query();
}//end class
?>