PHP Yii2.0框架 注册码(激活码)功能

5 篇文章 0 订阅

PHP Yii2.0框架 注册码(激活码)功能

1 视图部分

1、激活码列表

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\LinkPager;


/* @var $this yii\web\View */
/* @var $searchModel frontend\modules\resource\models\BranchSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = '激活码列表';
?>
    <!--新增按钮-->
    <div class="addBtn">
        <?= Html::a('导出激活码', '/resource/branch/export/?brid='.$brid, ['class' => 'btn btn-success create']) ?>
    </div>
<div class="branch-form">
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'code',
            ['label' => '企业名称',
            //通过关联模型来获取其他表的数据
            'value' =>'branch.title' ],
            ['label' => '用户姓名',
            'value' =>'member.user_name' ],
            ['label' => '用户手机号',
            'value' => 'member.phone' ],
            'act_time',
        ],
        'pager' => [
            'class' => LinkPager::className(),
            'firstPageLabel' => '首页',
            'prevPageLabel' => '<',
            'nextPageLabel' => '>',
            'lastPageLabel' => '尾页',
            'maxButtonCount' => 5,
            'hideOnSinglePage' => false,
        ]
    ]); ?>

</div>
<script src="/js/jquery-1.10.2.min_65682a2.js"></script>

效果展示:
在这里插入图片描述
2、生成激活码页面

create部分

<?php

use yii\helpers\Html;

$this->title = '生成激活码';
?>
<div class="branch-create">
    <?= $this->render('act_form', [
        'branch'=>$branch
    ]) ?>

</div>

act_form 部分:

<?php

use yii\helpers\Html;
use yii\helpers\Url;

?>
<div class="branch-form">
    <form action="<?php Url::to(['resource/branch/activationcreateok']); ?>" method="post">
        <input name="_csrf-frontend" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">
        <input name="brid" type="hidden" id="brid" value="<?= Html::encode($branch->id) ?>">
        <label class="control-label">企业名称:</label>
        <input type="text" name="brname" value="<?php echo HTML::encode($branch->title) ?>" readonly="readonly"
               class="form-control">
        <br>
        <label class="control-label">生成数量:</label>
        <input type="number" name="num" class="form-control" id='num' value="" placeholder="最大数字为99">
        <br>
        <p id="tishi" style="color: #FF0000"></p>
        <br><br>
        <input type="button" value="生  成" class="btn btn-success s-btn" id="submit"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input type="button" value="取  消" class="btn btn-primary" id="qx">
    </form>

</div>
<script src="/js/jquery-1.10.2.min_65682a2.js"></script>
<script>

    $(function () {
        //点击取消按钮
        $("#qx").click(function () {
            parent.location.reload();
        });
        //点击生成按钮
        $("#submit").click(function () {
            var val = $("#num").val();//获取激活码数量
            var csrf = $('#_csrf').val();//获取token值
            var brid = $('#brid').val();//获取brid的值
            //进行验证
            if (val.length > 2) {
                $('#tishi').html('最大值为99')
            } else if (val.length == '') {
                $('#tishi').html('此项必填!')
            } else {
                $('#tishi').html('')
                $.ajax({
                    type: 'POST',
                    url: "/resource/branch/createactivationok",
                    dataType: "json",
                    data: {
                        'num': val,
                        '_csrf-frontend': csrf,
                        'brid': brid
                    },
                    success: function (data) {
                        if (data.code == 200) {
                            alert(data.msg);
                            parent.location.href = '/resource/branch/index'
                        } else if (data.code == 405) {
                            alert(data.msg)
                        }
                    },
                });
            }
        });
    })

</script>

2 控制器部分


    /**
     * 激活码列表
     * @return string
     */
    public function actionActivationlist()
    {
        //获取企业ID
        $brid = Yii::$app->request->get('id');
        //查询当前企业的所有激活码
        $query = Activation::find()
            ->where(['brid' => $brid])
            ->select('*');
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 8,
            ],
        ]);
        return $this->render('activationlist', [
            'dataProvider' => $dataProvider,
            'brid' => $brid
        ]);
    }

    /**
     * 激活码生成
     */
    public function actionCreateactivation()
    {
        //获取当前企业id
        $brid = Yii::$app->request->get('id');
        //查询当前企业的信息
        $branch = (Branch::findOne($brid));
        return $this->render('activationcreate', [
            'branch' => $branch
        ]);
    }

    /**
     *激活码表单提交入库
     */
    public function actionCreateactivationok()
    {
        //获取表单提交的数据
        $data = Yii::$app->request->post();
        //设置批次号
        $batchNo = 'JHM' . date('y') . date('m') . date('d') . rand(1000000, 9999999);
        //循环插入数据
        for ($i = 0; $i < $data['num']; $i++) {
            $model = new Activation();
            $model->brid = $data['brid'];
            $model->code = $this->actionCreateguid(__NAMESPACE__);
            $model->batch_no = $batchNo;
            $model->created_at = date('Y-m-d H:i:s', time());
            $model->insert();
        }
        if ($model) {
            return json_encode(['code' => 200, 'msg' => '恭喜!生成激活码成功!']);
        } else {
            return json_encode(['code' => 405, 'data' => '生成失败']);
        }
    }

    /**
     * 生成随机激活码
     * @param null $namespace
     * @return string
     */
    public function actionCreateguid($namespace = null)
    {
        static $guid = '';
        $uid = uniqid("", true);
        $data = $namespace;
        $data .= $_SERVER ['REQUEST_TIME'];       // 请求那一刻的时间戳
        $data .= $_SERVER ['HTTP_USER_AGENT'];    // 访问者操作系统
        $data .= $_SERVER ['SERVER_ADDR'];        // serverIP
        $data .= $_SERVER ['SERVER_PORT'];        // port号
        $data .= $_SERVER ['REMOTE_ADDR'];        // 远程IP
        $data .= $_SERVER ['REMOTE_PORT'];        // port信息
        //ripemd128加密方式
        $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
        $guid = substr($hash, 0, 8);
        return $guid;
    }

    /**
     * 激活码导出excel
     * @throws \yii\db\Exception
     *
     */
    public function actionExport()
    {
//        获取企业ID
        $brid = Yii::$app->request->get('brid');
        $connection = Yii::$app->db;
        $sql = "select t1.code , t2.title , t3.user_name
,t3.phone,t1.act_time from activation t1 LEFT JOIN hy_industry_branch t2 on t1.brid = t2.id LEFT JOIN bas_member t3  on t1.uid = t3.id where t1.brid = $brid ";
        $command = $connection->createCommand($sql);
        $res = $command->queryAll();
        $data = [];
        foreach ($res as $v) {
            $data1 = array_values($v);
            array_push($data, $data1);
        }
        if (!empty($data)) {

            $filename = $data[0][1] . '激活码';
            $header = ['激活码', '企业名称', '用户姓名', '用户手机号', '激活时间'];
            //调用导出Excel函数,这里用的是PHPExcel包
            $this->exportEXCEL($data, $header, '第一页', $filename);

        } else {
            echo "<script type='text/javascript'>alert('没有数据可导出!');parent.location.href = '/resource/branch/index'</script>";
        }
    }

3 模型部分

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "activation".
 *
 * @property int $id 主键id
 * @property int $uid 会员id
 * @property string $username 用户名
 * @property int $brid 企业id
 * @property string $brname 企业名称
 * @property string $code 唯一激活码
 * @property string $status 会员激活状态  1: 激活  0: 未激活
 * @property int $batch_no 批次号
 * @property string $created_at 创建时间
 * @property string $updated_at 修改时间
 * @property string $deleted_at 删除时间
 * @property string $act_time 激活时间
 */
class Activation extends \yii\db\ActiveRecord
{
    //激活码数量
    public static $num;
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'activation';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['code'], 'required'],
            [['uid', 'brid'], 'integer'],
            [['created_at', 'updated_at', 'deleted_at', 'act_time'], 'safe'],
            [['code'], 'string', 'max' => 8],
            [['code'], 'unique']
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'uid' => '用户表关联id',
            'brid' => '企业表关联id',
            'code' => '激活码',
            'status' => '状态',
            'batch_no' => '批次号',
            'created_at' => '创建时间',
            'updated_at' => '更新时间',
            'deleted_at' => '删除时间',
            'act_time' => '激活时间',
            'brname' => '企业名称'
        ];
    }

    public function getBranch() {
        return $this->hasOne(Branch::className(), ['id' => 'brid']);
    }
    public function getMember(){
        return $this->hasOne(BasMember::className(),['id'=>'uid']);
    }
}

数据表设计:

CREATE TABLE `activation` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员id',
  `brid` int(5) unsigned NOT NULL DEFAULT '0' COMMENT '企业id',
  `code` char(8) NOT NULL DEFAULT '' COMMENT '唯一激活码',
  `status` smallint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT '会员激活状态  1: 激活  0: 未激活',
  `batch_no` varchar(20) NOT NULL DEFAULT '' COMMENT '批次号',
  `act_time` timestamp NULL DEFAULT NULL COMMENT '激活时间',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '激活码生成时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '激活时为激活时间,其他情况是修改时间',
  `deleted_at` timestamp NULL DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `激活码` (`code`) USING BTREE COMMENT '激活码唯一索引'
) ENGINE=InnoDB AUTO_INCREMENT=571 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='激活码表\r\n';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值