基于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 03 PHP
php中定义网站根目录的常用方法
Aug 08 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
两种php实现图片上传的方法
Jan 22 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
MySQL修改密码方法总结
2008/03/25 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
白酒营销策划方案
2014/08/17 职场文书
政风行风评议心得体会
2014/10/21 职场文书