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 相关文章推荐
PHP4实际应用经验篇(3)
Oct 09 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
php打造属于自己的MVC框架
Mar 07 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP实现邮件群发的源码
Jun 18 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php 的多进程操作实践案例分析
Feb 28 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和ACCESS写聊天室(九)
2006/10/09 PHP
php把session写入数据库示例
2014/02/26 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
python rsa 加密解密
2017/03/20 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
天网工程实施方案
2014/03/26 职场文书
支部组织生活会方案
2014/06/10 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
测量员岗位职责
2015/02/14 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
水知道答案观后感
2015/06/08 职场文书
观后感开头
2015/06/19 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
SQL Server中的游标介绍
2022/05/20 SQL Server