基于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自动加载的两种实现方法
Jun 21 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
YII2框架使用控制台命令的方法分析
Mar 18 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
python中update的基本使用方法详解
2019/07/17 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python实现拼图小游戏
2020/02/22 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
客服部工作职责范本
2014/02/14 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
生物科学专业自荐书
2014/06/20 职场文书
合同意向书范本
2014/07/30 职场文书
国庆促销活动总结
2014/08/29 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis