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
php 编写安全的代码时容易犯的错误小结
May 20 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
php实现求相对时间函数
Jun 15 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
PHP编码规范-php coding standard
2007/03/16 PHP
php fckeditor 调用的函数
2009/06/21 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
jquery replace方法去空格
2017/05/08 jQuery
JS装饰器函数用法总结
2018/04/21 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
理解Python中函数的参数
2015/04/27 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
查看keras的默认backend实现方式
2020/06/19 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
装饰活动策划方案
2014/02/11 职场文书
优秀团队获奖感言
2014/02/19 职场文书
对公司合理化的建议书
2014/03/12 职场文书
房地产端午节活动方案
2014/08/24 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书