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


Posted in PHP onSeptember 23, 2015

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

前端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 无刷新导入数据,希望对大家有所帮助。

PHP 相关文章推荐
PHP 中的类
Oct 09 PHP
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
PHP 遍历文件实现代码
May 04 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
yii操作cookie实例简介
Jul 09 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
php设置页面超时时间解决方法
Sep 22 #PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 #PHP
PHP判断字符串长度的两种方法很实用
Sep 22 #PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 #PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 #PHP
PHP实现搜索相似图片
Sep 22 #PHP
从刷票了解获得客户端IP的方法
Sep 21 #PHP
You might like
php日历[测试通过]
2008/03/27 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
关于Python数据结构中字典的心得
2017/12/04 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python中按键来获取指定的值
2019/03/02 Python
python实现126邮箱发送邮件
2020/05/20 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
公司总经理岗位职责
2014/03/15 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
担保书范本
2015/01/20 职场文书
写给老师的感谢信
2015/01/20 职场文书
2015年采购工作总结
2015/04/10 职场文书
用人单位聘用意向书
2015/05/11 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书