![](/img/trans.png)
[英]Pass codeigniter $data['foo'] from controller to view
[英]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.