2014-06-11 152 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

相關問題