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

 更新时间:2020年04月13日 15:33:42   作者:人生如初见_张默  
这篇文章主要介绍了yii2.0框架实现上传excel文件后导入到数据库的方法,结合实例形式详细分析了yii2.0上传excel文件后导入到数据库的相关模型、视图、控制器实现技巧,需要的朋友可以参考下

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

相关文章

  • 基于CI框架的微信网页授权库示例

    基于CI框架的微信网页授权库示例

    这篇文章主要介绍了基于CI框架的微信网页授权库,结合实例形式分析了CI框架整合微信授权功能及控制器调用的相关实现技巧,需要的朋友可以参考下
    2016-11-11
  • PHP CURL 内存泄露问题解决方法

    PHP CURL 内存泄露问题解决方法

    这篇文章主要介绍了PHP CURL 内存泄露问题解决方法,CRUL长时间访问HTTPS网站时有内存泄露问题,本文经过反复调试找到了解决方法,需要的朋友可以参考下
    2015-02-02
  • php微信公众号开发模式详解

    php微信公众号开发模式详解

    这篇文章主要介绍了php微信公众号开发者模式,通过后台服务器与微信关注用户实现更多的交互作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • laravel5.6 框架邮件队列database驱动简单demo示例

    laravel5.6 框架邮件队列database驱动简单demo示例

    这篇文章主要介绍了laravel5.6 框架邮件队列database驱动,结合实例形式详细分析了laravel5.6邮件队列database驱动具体设置、实现步骤与相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • Yii使用CLinkPager分页实例详解

    Yii使用CLinkPager分页实例详解

    这篇文章主要介绍了Yii使用CLinkPager分页的方法,需要的朋友可以参考下
    2014-07-07
  • php中stream(流)的用法

    php中stream(流)的用法

    Stream是PHP开发里最容易被忽视的函数系列(SPL系列,Stream系列,pack函数,封装协议)之一,但其是个很有用也很重要的函数。Stream可以翻译为“流”,下面是使用方法
    2014-03-03
  • PHPStudy下如何为Apache安装SSL证书的方法步骤

    PHPStudy下如何为Apache安装SSL证书的方法步骤

    这篇文章主要介绍了PHPStudy下如何为Apache安装SSL证书的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • php行为验证码防止短信轰炸实例

    php行为验证码防止短信轰炸实例

    这篇文章主要为大家介绍了php行为验证码来防止短信轰炸实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 获取URL文件名后缀

    获取URL文件名后缀

    用php分析URL网址,可以得到文件名、目录路径,还有其它数据,原理就是使用PHP的explode函数分隔字符串。
    2013-10-10
  • tp5实现微信小程序多图片上传到服务器功能

    tp5实现微信小程序多图片上传到服务器功能

    这最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端。下面脚本之家小编给大家带来了tp5实现微信小程序多图片上传到服务器的方法,需要的朋友可以参考下
    2018-07-07

最新评论