思路
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);
}
}
});
});
},