php教程

超轻量级php框架startmvc

基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据

更新时间:2020-03-05 22:51 作者:startmvc
废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方

废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方欢迎给我留言。

前端HTML+JQuery  备注Jquery需要1.x版本,不能用2.x版本

1.引入必要文件及上传input


 <load file="__PUBLIC__/js/jquery-1.11.3.min.js" />
 <load file="__PUBLIC__/uploadify/jquery.uploadify.min.js" />
 <load file="__PUBLIC__/uploadify/uploadify.css" />
<input type="file" class="" id="student" name="student">

2.uploadify使用操作


<script>
 $(function(){
 //ThinkPHP上传地址
 var upload = "{:U(MODULE_NAME.'/Student/upload')}";
 //ThinkPHP sessionID的提交变量
 //'VAR_SESSION_ID'=>'session_id',在ThinkPHP/Conf/convention.php中进行配置,默认关闭的需要开启
 var sid = '{:session_id()}';
 //导入数据地址
 var daoruUrl = "{:U(MODULE_NAME.'/Student/daoruHandle')}"
 //Amaze ui 模态框
 var modal = $('#my-modal-loading');
 //uploadify使用方法
 $('#student').uploadify({
 'swf' : '__PUBLIC__/uploadify/uploadify.swf',
 'uploader' : upload,
 'buttonText' : '选择文件...',
 'width':120,
 'height':30,
 'formData':{'session_id':sid},
 'fileTypeExts':'*.xls',
 //开始上传弹出模态框
 'onUploadStart' : function(file) {
 $('#alert-content').html('正在上传文件');
 modal.modal();
 },
 //上传成功关闭模态框,并用后台函数导入数据
 'onUploadSuccess':function(file, data, response){
 $('#alert-content').html('正在导入数据');
 data = eval("("+data+")");
 $.ajax({
 type: 'POST',
 url: daoruUrl,
 data: {'file':data.file},
 success: function(retdata){
 modal.modal('close');
 if(retdata==1){
 alert('导入成功');
 }else{
 alert('导入失败');
 }
 },
 dataType: 'json'
 });
 }
 });
 });
 </script>

3、ThinkPHP控制器上传操作:备注需要引入Upload.class.php空间


 function upload(){
 $config = array(
 'maxSize' => 3145728,
 'rootPath' => './Uploads/',
 'savePath' => '',
 'saveName' => array('uniqid',''),
 'exts' => array('xls'),
 'autoSub' => true,
 'subName' => array('date','Ymd'),
 );
 $upload = new Upload($config);
 // 上传文件 
 $info = $upload->upload();
 if(!$info) {// 上传错误提示错误信息
 $this->error($upload->getError());
 }else{// 上传成功 获取上传文件信息
 $file = $info['Filedata']['savepath'].$info['Filedata']['savename'];
 }
 //p($info);
 $data = array(
 'file'=>'./Uploads/'.$file,
 );
 echo json_encode($data);
 }

4.导入数据进去mysql


//导入数据处理
 function daoruHandle(){
 $file = I('file');
 $excelData = excel_to_mysql($file);
 foreach($excelData['data'] as $row){
 $data = array(
 'xuehao'=>$row['xuehao'],
 'xingming'=>$row['xingming'],
 'xingbie'=>($row['xingbie']=='男')?1:0,
 'mima'=>md5($row['mima']),
 );
 M('student')->add($data);
 }
 echo 1;
 }

5.PHPExcel读取Excel文件返回数据函数


function excel_to_mysql($file){
 //导入PHPExcel第三方类库
 //vendor('PHPExcel.PHPExcel');
 import('Classes.PHPExcel',COMMON_PATH,'.php');
 //实例化PHPExcel类,用于接收Excel文件
 $PHPExcel = new PHPExcel();
 //读取Excel文件类实例化
 $PHPReader = new PHPExcel_reader_Excel5();
 //检测Excel版本是否可读
 if(!$PHPReader->canRead($file)){
 $PHPReader = new PHPExcel_Reader_Excel2007();
 if(!$PHPReader->canRead($file)) return array('error'=>1);//未知版本的Excel
 }
 //读取Excel文件
 $PHPExcel = $PHPReader->load($file);
 //获得Excel中表的数量
 $sheetCount = $PHPExcel->getSheetCount();
 //获得第一张工作表
 $sheet=$PHPExcel->getSheet(0);
 //获得表中最大数据列名
 $column = $sheet->getHighestColumn();
 //获得表中最大数据行名
 $row = $sheet->getHighestRow();
 //循环获得表中数据
 for($i=1;$i<=$row;$i++){
 $data[] = array(
 //通过工作表对象的getCell方法获得单元格 getValue方法获得该单元格数值
 'xuehao'=>$sheet->getCell('A'.$i)->getValue(),
 'xingming'=>$sheet->getCell('B'.$i)->getValue(),
 'xingbie'=>$sheet->getCell('C'.$i)->getValue(),
 'mima'=>$sheet->getCell('D'.$i)->getValue(),
 );
 }
 //释放工作表对象
 unset($sheet);
 //释放读取Excel文件对象
 unset($PHPReader);
 //释放Excel文件对象
 unset($PHPExcel);
 //返回数据
 return array('error'=>0,'data'=>$data);
 }

通过以上代码实现了ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据,希望对大家有所帮助。