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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
PHP Google的translate API代码
Dec 10 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
PHP函数积累总结
Mar 19 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 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
FCKeditor添加自定义按钮
2008/03/27 PHP
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
python实现决策树分类
2018/08/30 Python
Python内置加密模块用法解析
2019/11/25 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
期中考试后的反思
2014/02/08 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
邀请书模板
2015/02/02 职场文书
繁星春水读书笔记
2015/06/30 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记