yii2.0框架实现上传excel文件后导入到数据库的方法示例


Posted in PHP onApril 13, 2020

本文实例讲述了yii2.0框架实现上传excel文件后导入到数据库的方法。分享给大家供大家参考,具体如下:

Model模型

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/13
 */

namespace app\models;

use yii\base\Model;
use yii\db\ActiveRecord;
use yii\web\UploadedFile;

class uploadForm extends ActiveRecord
{
  public $file;

  public function rules()
  {
    return [
      [['file'],'file', 'skipOnEmpty' => false,'extensions' => 'xls,xlsx'],
    ];
  }

  public function attributeLabels()
  {
    return [
      'file'=> '上传文件'
    ];
  }

  public function upload()
  {
    $file = UploadedFile::getInstance($this, 'file');

    if ($this->rules()) {
      $tmp_file = $file->baseName . '.' . $file->extension;
      $path = 'upload/' . 'Files/';
      if (is_dir($path)) {
        $file->saveAs($path . $tmp_file);
      } else {
        mkdir($path, 0777, true);
      }
      $file->saveAs($path . $tmp_file);
      return true;
    } else {
      return '验证失败';
    }
  }

}

Views视图

<?php

use yii\widgets\ActiveForm;

$model = new app\models\uploadForm();
$form = ActiveForm::begin([
  'id' => 'upload',
  'options' => ['enctype' => 'multipart/form-data'],
])
?>

<?= $form->field($model,'file')->fileInput(['multiple'=>'multiple']) ?>

  <button>上传</button>
<?php ActiveForm::end() ?>

Controller控制器

<?php
/**
 * 描述...
 * @author zcy
 * @date 2019/8/16
 */

namespace app\controllers;

use app\models\uploadForm;
use Yii;
use yii\web\Controller;
use yii\web\UploadedFile;

class UploadController extends Controller
{
  /**
   * 导入
   * @author zcy
   * @date 2019/8/16
   */
  public function actionImport()
  {
    $model = new uploadForm();

    if (Yii::$app->request->isPost) {
      $model->file = UploadedFile::getInstance($model,'file');
//      if ($model->upload()) {
//        print <<<EOT
// <script>alert('上传成功')</script>
//EOT;
//      } else {
//        print <<<EOT
// <script>alert('上传失败')</script>
//EOT;
//      }
      if (!$model->upload()) {
        print <<<EOT
 <script>alert('上传失败')</script>
EOT;
      }
    }

    $ok = 0;
    if ($model->load(Yii::$app->request->post())) {
      $file = UploadedFile::getInstance($model,'file');

      if ($file) {
        $filename = 'upload/Files/' . $file->name;
        $file->saveAs($filename);

        if (in_array($file->extension,array('xls','xlsx'))) {
          $fileType = \PHPExcel_IOFactory::identify($filename);//文件名自动判断类型
          $excelReader = \PHPExcel_IOFactory::createReader($fileType);

          $phpexcel = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet
          $total_line = $phpexcel->getHighestRow();//总行数
          $total_column = $phpexcel->getHighestColumn();//总列数

          if (1 < $total_line) {
            for ($row = 2;$row <= $total_line;$row++) {
              $data = [];
              for ($column = 'A';$column <= $total_column;$column++) {
                $data[] = trim($phpexcel->getCell($column.$row));
              }

              $info = Yii::$app->db->createCommand()
->insert('{{%shop_info}}',['shop_name' => $data[0],'shop_type' => $data[1]])
->execute();

              if ($info) {
                $ok = 1;
              }
            }
          }

          if ($ok == 1) {
            echo "<script>alert('导入成功');window.history.back();</script>";
          } else {
            echo "<script>alert('操作失败');window.history.back();</script>";
          }
        }
      }
    } else {
      return $this->render('import',['model' => $model]);
    }
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
综合图片计数器
Oct 09 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
PHP文件上传原理简单分析
May 29 PHP
第四章 php数学运算
Dec 30 PHP
php读取mysql的简单实例
Jan 15 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
YII框架常用技巧总结
Apr 27 PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
laravel使用数据库测试注意事项
Apr 10 #PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 #PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 #PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 #PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 #PHP
You might like
php curl模拟post请求小实例
2013/11/13 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
javascript基础知识讲解
2017/01/11 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
js调用设备摄像头的方法
2018/07/19 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
Python创建模块及模块导入的方法
2015/05/27 Python
python实现学员管理系统
2019/02/26 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
党的生日活动方案
2014/08/15 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
战马观后感
2015/06/08 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android