繁体   English   中英

Codeigniter传递数据以查看并返回到控制器

[英]Codeigniter pass data to view and back to controller

我有一个有效的CSV上传文件,它将数据弹出到数据库中,然后打开一个包含数据表的视图供用户查看。

我想做的是在视图上有一个按钮,然后开始处理数据,并且仅处理添加的新数据。 如果表中有100条旧行,但是我在上传时添加了50条新行,那么我只想处理它们。 听起来很简单,但我想不出一种方法将数据(要处理的行)传递回进行处理的新控制器。 数据位于一个数组(id的数组)中,并且作为变量放在url的末尾有太多内容,因为该数组最多可以包含400个条目

我认为做到这一点的唯一方法似乎太可怕了。 我可以使用json编码将数组放入数据库表的单个单元格中,并为此表行指定一个ID。 然后,我可以将ID从视图传递到新控制器并检索数组。 一定会有更好的办法?

移动解析CSV的代码,并将数组构建到其自己的函数中。 我们将说您正在创建一个_parse_csv()方法,该方法将接受$filename作为参数,然后读取csv,处理数据并返回一个数组。 您可以使用var_export并将已处理的阵列写入磁盘并以_parse_csv方法加载,而无需重新处理。

private function _parse_csv($filename) {
    // do some stuff with the uploaded csv here
    // return an array of data from the csv
    return $csv_array;
}

在csv上传中调用此方法,并将上传的文件名传递给它。

您的process data按钮可以将$filename传递给控制器​​/方法,该控制器/方法会将CSV解析为一个数组以进行处理。

使用类属性定义上传文件夹。 处理时不传递上传文件夹,仅传递文件名。

警告: 如讨论这个选项是不安全的。 您将需要采取额外的预防措施,以确保用户无法通过猜测filename参数来启动csv处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM