2012-02-01 39 views
-1

我的客戶希望擁有3頁的表單。第一頁允許用戶輸入包括上傳文件的數據。第二頁確認這些數據。第三頁將數據提交給數據庫和目錄。將頁面上傳的文件逐頁傳輸

通過郵政,我可以繼續保存數據到隱藏的輸入字段,多數民衆贊成沒問題。我的問題是上傳的文件。我如何在頁面之間保存該文檔?我正在使用CakePHP,但任何建議將有所幫助,謝謝

+0

我不得不質疑爲什麼你需要3頁來提交/驗證/提交表單。你真的只需要1頁。你介紹頁面,當他們點擊提交你驗證。如果不驗證,則再次顯示相同的頁面,指出哪些字段無效。至於文件,除非整個表單通過驗證,否則不會上傳它。 – Jeff 2012-02-01 23:52:13

+1

你曾經爲某人做過工作嗎?他們想要一些你完全不同意的東西?那麼這就是其中之一。 – numerical25 2012-02-02 00:46:35

回答

-1

上傳的文件總是暫時保存。服務器env var應該告訴你它在哪裏。在Ruby的機架中,它存儲在params var。所以我想在php中有一個類似的params var,它有一個包含所有必要信息的hash。

-1

由於文件將在第一步上傳,一種選擇是把文件的位置在一個隱藏的輸入域數據的其餘部分一起(無論是那裏,或者把它放在會話)。隨着CakePHP的,如果你的文件字段看起來有點像:

<input type="file" name="data[User][image]" id="UserImage" /> 

然後,你就可以通過

$location = $this->data['User']['image']['tmp_name']; 

這將對應於像/var/tmp中/ XXXXXX捕捉到的位置

在最後一頁上,如果用戶確認所有數據,則只需使用move_uploaded_file()將文件放在服務器上的任何位置。

move_uploaded_file($location, '/new/location'); 
+0

所以你說,只要我將tmp_name的位置存儲在隱藏文件中。我應該沒事? – numerical25 2012-02-02 00:48:48

+0

我不確定該文件是否可以保證在跨越請求的PHP TMP目錄中... – Ivo 2012-02-02 02:25:46

+0

@Ivo取決於網站的託管位置。在典型的linux環境中,tmp目錄只有在重新啓動後纔會被清除(根據FHS),所以文件在該過程中不可能消失。但是,如果有疑問,您可以隨時創建一個自定義的_temp_目錄,文件可以隨時隨地保留。 – void0 2012-02-02 02:59:12

0

您只需將文件上傳到臨時目錄,並將該值保存在隱藏變量中,就像其他表單數據一樣。如果表單成功提交,然後圖像複製到所需的位置其他明智地刪除圖像

+0

那些未被確認的表單中的文件呢? – 2012-02-02 09:53:25

+0

服務器僅臨時存儲文件,到達下一頁時文件不再存在。 – numerical25 2012-02-07 22:02:10

1

你總是可以創建表單利用三個不同頁面的錯覺。使用AJAX接受並驗證/請求用戶確認他們提交的數據。如果在這個視圖中,他們接受它啓動一個POST來提交所有的數據。

你真的不需要三個物理上不同的文件來實現這一點,但你仍然可以讓它出現在三個階段,以保持你的客戶滿意。

+0

'* high five *':) – 2012-02-02 09:52:44

0

您可以使用CSS輕鬆僞造這3頁。甚至2,因爲「第三頁」實際上是一個服務器腳本,它與瀏覽器中的頁面無關。

只需製作表格,然後在提交按鈕上放置一個事件,將div更改爲他想要的任何「確認頁面」。然後使用此頁面上的按鈕實際發送表單。

這就是全部