个人技术分享

思路

1创建多数据库连接
2后端的前台代码能使用get或者post请求传递选中数据给后台
3后台能够接收到
4后台接收到id或者全字段数据后对数据进行处理,然后使用多数据库操作将其存入第二个数据库

实现

1 config文件下创建新数据库连接

'db_config2' => [
        // 数据库类型
        'type' => 'mysql',
        // 服务器地址
        'hostname' => '127.0.0.1',
        // 数据库名
        'database' => 'test',
        // 用户名
        'username' => 'root',
        // 密码
        'password' => '123456',
        // 端口
        'hostport' => '3306',
        // 连接dsn
        'dsn' => '',
        // 数据库连接参数
        'params' => [],
        // 数据库编码默认采用utf8
        'charset' => 'utf8',
        // 数据库表前缀
        'prefix' => 'fa_',
    ],

前端网页传递参数

再index.html文件中添加按钮

<a class="btn btn-primary btn-more dropdown-toggle btn-disabled" data-url="user/user/option" id='chuancan' data-toggle="dropdown">一键导出</a>

请删除按钮的这个 btn-dialog,添加这个属性会在原页面弹出一个输入框,与这里逻辑不符

此时前端就能正常显示按钮,然后为按钮绑定事件
这里请把data_url改成后端地址,id改成js获取的名称
然后再js代码的

 // 为表格绑定事件
            Table.api.bindevent(table);

这句初始化代码下添加操作,这段代码用来监听事件,获取到变化了的多选按钮框

// get方法,gpt生成,能改变url地址
            $(document).on('change', '#table .bs-checkbox [type="checkbox"]', function () {
                let selectedIds = Table.api.selectedids(table); // 只调用一次,结果存储在变量中
                console.log(selectedIds); // 测试是否成功
                let url = $('#chuancan').attr('data-url');//获取url存储data-url的地址
                url = url.split('?')[0]; // 移除现有查询参数

                if (selectedIds.length) {//判断selectedids是否有值
                    url += '?' + 'id=' + selectedIds.join(','); // 是的话将其拼接在一起形成新的url
                }
                $('#chuancan').attr('data-url', url); // 更新按钮的data-url属性
            });

这里是使用了change监听点击事件,使用get传参的方式给后端请求参数,里面的console.log是为了打印传递的数据,这里会实现管理员只要勾选了数据就会拼接数据的id给url地址的后面

后端接收前端传递的参数

$selectids = $this->request->get('id');

        $selectids = explode(',',$selectids);

                //查询本地数据库
        $res = model('user')->where('id','in',$selectids)->select();
        $filteredData = [];

接收到数据后进行处理

 foreach ($res as $result) {
            // 使用模型的getData方法获取所有属性值,这样可以不受保护属性的影响
            $userData = $result->getData();

            // 移除不需要的字段,这里列出您不想保留的字段名
            $fieldsToRemove = ['id', 'group_id','createtime', 'updatetime', 'jointime', 'prevtime', 'logintime'];

            // 使用array_diff_key过滤掉不需要的键
            $filteredUserData = array_diff_key($userData, array_flip($fieldsToRemove));

            // 将处理后的数据加入到结果数组
            $filteredData[] = $filteredUserData;
        }

//        $len = count($filteredData)-1;
        foreach ($filteredData as $value) {
            $sql = "INSERT INTO `user` (
        `username`, `nickname`, `password`, `mobile`, `email`
    ) VALUES (
        '{$value['username']}', '{$value['nickname']}', '{$value['password']}', '{$value['mobile']}', '{$value['email']}'
    )";

            try {
                $result = Db::connect(config("db_config2"))->execute($sql);
            } catch (\Exception $exception) {
                // 打印错误信息
                echo "用户".$value['username'].'导出失败' . $exception->getMessage() . "\n";
                // 继续执行下一次循环
                continue;
            }

        }
       if ($result) {
            $data = [
                'code' => 200,
                'message' => '操作成功',
                'data' => 111,
            ];
            return json($data); // 使用json格式返回数据,确保前端能正确解析
        }
        else {
            // 如果有错误,也可以相应地返回错误信息
            $errorData = [
                'code' => 400,
                'message' => '操作失败',
            ];
            return json($errorData);
        }

前端接收回调的参数

这里请使用json格式打印提示信息与提示码,为了方便前端接收回调数据

目前问题基本完成,只剩下接收后台回调参数
这里使用js接收请求的操作,然后按照自带的 Toastr展示信息

     //点击传参时事件
            $('#chuancan').click(function(e){
                e.preventDefault();
                $.ajax({
                    url: $('#chuancan').attr('data-url'), // 从按钮的data-url属性获取请求地址
                    success: function (data) {
                        // console.log(data, 4455);
                        if (data.code == 200) {
                            Toastr.success("成功"); // 再次显示成功提示
                            const params = $('#chuancan').attr('data-url').split('?')[1].slice(1);
                            // 注意:这里似乎有一段注释掉的代码块,应该是误操作。
                        }else{
                            Toastr.error("成功"); // 再次显示成功提示
                            const params = $('#chuancan').attr('data-url').split('?')[1].slice(1);
                        }
                    }
                });
            });
        },