2010-08-02 31 views
0

好,所以我有一個HTML表格,10個文件上傳。 6張圖片和4張pdf。其中一些文件不需要其他文件。表單提交多個文件不保留數據

我的問題是,當我的腳本驗證數據並回推給用戶他/她有錯誤時,所有的文件輸入都回來爲空,如果用戶重新提交...文件不是保存。

此表單還具有文件以外的其他字段。

我試着把$_POST放在我的輸入值中,但是沒有用本地文件名重新填充。

我想這樣我的用戶不需要重新輸入他們想要上傳的所有文件,如果他們犯了一個或幾個錯誤。

編輯: SO這是正常的,後沒有給我的文件名? 是仍然在服務器上保存爲臨時文件?

回答

0

文件輸入類型的值的屬性不存在,因爲這是一個安全隱患。你不能讀取它或設置它的值(客戶端或服務器端),所以即使你的用戶計算機上有本地路徑,也不能填充它。

我會嘗試做某種客戶端(即使通過ajax)表單驗證,然後再提交表單。如果他們提交表單,那麼這些文件將會上傳並且應該仍然在臨時目錄中(至少在垃圾收集啓動之前)。也許錯誤地將$ _FILES中的信息寫入會話中,而不是顯示文件上傳對話框,顯示文件的圖標以試圖讓他們知道您獲得了該文件,但他們需要修復表單以完成所有工作。然後,他們提交更正後,您可以從會話中獲取數據並嘗試繼續。

+0

'得到名字,我一直在尋找一個答案,這看起來像是一條非常好的路。所以我開始在發送給服務器之前添加javascript驗證。 – StiGMaT 2010-08-02 20:38:44

0

確保爲指定正確的設置:

  • file_uploads
  • 的upload_max_filesize
  • memory_limit的
  • 的max_execution_time
  • 的post_max_size

參見:

還要確保:

  • 您指定的form
  • enctype="multipart"檢查文件陣列print_r($_FILES);
+0

我的設置應該都可以。如果用戶不犯任何錯誤,一切都可以工作。但是如果有1個遺忘者頁面重新加載。有沒有辦法獲得本地文件路徑和文件名,以便如果他們犯了錯誤,他們不需要重新填寫表格。 – StiGMaT 2010-08-02 18:34:15

+0

我的print_r在第一篇文章中提交了文件名和數據發送我糾正了我的錯誤,並重新提交沒有圖像出來。 – StiGMaT 2010-08-02 18:34:52

+0

你可以從'$ _FILES ['fieldName'] ['name']' – Sarfraz 2010-08-02 18:39:25

0

重定向他們,而不是回到形式使用一些JavaScript和make客戶端瀏覽器返回一頁。然後他應該提交之前選中的文件。
您可以使用類似:

<body onLoad="javascript:history.go(-1)">...</body>