2014-06-11 91 views
0

我有一个可用的CSV上传,它将数据弹出到数据库中,然后打开一个数据表的视图供用户查看。Codeigniter传递数据以查看并返回到控制器

我想要做的是在视图上有一个按钮,然后开始处理数据,并只处理添加的新数据。如果表格有100个旧行,但我上传了50个新行,我只想处理它们。听起来很简单,但我想不出一种方法将数据(要处理的行)传递回将执行处理的新控制器。数据是在一个数组(数组的ID),并有太多的变量放在URL的末尾,因为该数组可能有多达400个条目

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

+0

'我有一个可以正常工作的CSV上传文件,可以将数据弹出到数据库中......'我想不出一种方法将数据传递回新的控制器来处理数据。你在查询数据库吗?我可能误解了这个问题 – tonyjmnz

+0

我可以并且想要查询数据库,但是我需要从视图中获取数据来了解查询。比方说,我有100行在表中,然后我上传一个csv与另外2行。我只想处理那两个新行,而不是整个表。但我也可能导入400个新的行,所以URL参数传递将无法正常工作。我只需要能够将ID从一个视图传递到下一个控制器或方法 – EnduroDave

回答

1

移动解析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解析为数组进行处理。

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

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

+0

不知道我是否正确理解这一点,但似乎在第二步中解析CSV第二次? '您的流程数据按钮可以将$ filename传递给控制器​​/方法,该控制器/方法会将CSV解析为一个数组进行处理。'这可以工作,但是我上面的丑陋方法至少会解除对第二批处理的需要数据已经存在于数据库中 - 我只需要找到一种方法来传递关于处理哪个数据库子集的信息。我错过了什么吗? – EnduroDave

相关问题