2009-07-02 122 views
17

我試圖放在一起的HTML POST-ed表單有兩個字段 - 文件上傳和文本字段。由於表單的文件上傳類型爲multipart/form-data,因此無法通過正常的PHP $ _POST變量獲取文本字段。那麼我怎樣才能在PHP的表單中的文本字段?PHP - 解析多部分表單數據

按照要求,這裏的一些代碼,直接從安德魯基本上採取:

<html> 
    <body> 
     <form action="test2.php" method="post" enctype="multipart/form-data"> 
      Name: <input type="text" name="imageName" /> 
      Image: <input type="file" name="image" /> 
      <input type="submit" value="submit" /> 
     </form> 
    </body> 
</html> 

<?php 
    echo $_POST['imageName']; 
    echo "<pre>"; 
    echo var_dump($_FILES['image']); 
    echo "</pre>"; 
?> 

這是整個測試文件。如果我刪除了enctype,我可以得到POST-ed數據,但不是當然的文件。使用enctype作爲multipart/form-data,我可以獲取文件,但是沒有任何來自POST-ed數據。

下面是與ENCTYPE輸出:

array(5) { 
    ["name"]=> 
    string(34) "testing.png" 
    ["type"]=> 
    string(0) "" 
    ["tmp_name"]=> 
    string(0) "" 
    ["error"]=> 
    int(1) 
    ["size"]=> 
    int(0) 
} 

沒有:

testing 

NULL 

完全相同輸入兩次。

+1

喬納森和安德魯說,$ _ POST應該工作,假設你使用後張貼您的形式(這是一個好的假設,因爲你要發佈的文件)。那麼你可以發佈一些代碼嗎?確保在html文本字段中設置了name屬性,這就是你用來獲取文本frield值的方法。 – alanquillin 2009-07-02 17:01:59

回答

22

文件上傳來自$_FILES。其他一切都通過$_POST(假設您的HTML表單的method屬性設置爲"post")。

+0

你的意思是假設表單*方法*是Post? – Pacerier 2012-01-11 05:38:09

+0

@Pacerier糟糕,感謝您的糾正。 – Sampson 2012-01-11 05:53:08

+0

客戶是否一個一個地發送每個部分?我如何將它設置爲一次發送文件和一些數據? – Richard 2015-06-23 00:57:18

4

$_POST應該適用於文本字段。您將需要使用$_FILES作爲實際文件。考慮下面的HTML:

<html> 
    <body> 
    <form action="self.php" method="post" enctype="multipart/form-data"> 
     Name: <input type="text" name="imageName" /> 
     Image: <input type="file" name="image" /> 
     <input type="submit" value="Submit" /> 
    </form> 
    </body> 
</html> 

您可以訪問域的方式如下:

<?php 
    echo $_POST['imageName']; 
    echo "<pre>"; 
    echo var_dump($_FILES['image']); 
    echo "</pre>"; 
?> 
+1

不起作用。只是嘗試,我甚至複製/粘貼你放在那裏(但添加了一個提交按鈕),並試圖 - 絕對不行。如果我刪除了enctype,它就可以工作,但是我當然沒有得到他的文件,如果我將它作爲多部分/表單數據,我會得到該文件,但是我*不會*獲取POST-ed數據。 – DashRantic 2009-07-02 17:09:06

+0

應該工作。你的問題在別的地方。 – Javier 2009-07-02 17:15:25

+1

您使用的是哪個版本的PHP?任何配置更改和特殊擴展啓用? – 2009-07-02 18:38:42

0

[2010-02-13 10:57 UTC] sudeshkmr在雅虎點com

我面臨同樣的問題,並沒有什麼工作。我在Windows Vista上測試了Apache 2.2,PHP 5.3。我還使用Apache 2.2和PHP 5.3在Ubuntu(Karmic)上進行了測試。我還測試了nGinX 0.8和PHP 5.3。

然後我找到了一個解決方法。參數action =「」不應該是你有文件上傳形式的腳本頁面本身。例如,你有一個帶有上傳表單的頁面index.php。

行動=「upload.php的」 < --------這個頁面有比文件上傳表單頁面不同,它適用於PHP的所有配置!

請勿用於動作參數。

8

查看您的帖子限制。我瘋了,試圖找出是什麼原因造成的。對Apache錯誤日誌的快速檢查表明帖子內容長度超出了限制。提高限制後,發佈數據可用。

1

我有同樣的問題,因爲在最前面。如果您已經能夠上傳文件,那麼請嘗試加載文件大小小於1MB的文件,然後問題是upload_max_filesize和post_max_size值會增加這些值並再次嘗試。這是解決我的問題。