基于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.MVC的模板标签系统(一)
Sep 05 PHP
一个PHP日历程序
Dec 06 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php支持中文字符串分割的函数
May 28 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
php实现JWT验证的实例教程
Nov 26 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自定义session示例分享
2014/04/22 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
python实现ip查询示例
2014/03/26 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
python文件编写好后如何实践
2020/07/07 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
蛋糕店的商业计划书范文
2014/01/27 职场文书
媒体宣传策划方案
2014/05/25 职场文书
公共场所标语
2014/06/30 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
辞职书格式样本
2015/02/26 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android