我有一個HTML表單像這樣:處理輸入=「文件」陣列
<form method="post" enctype="multipart/form-data">
<input type="file" name="pictures[]" required>
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
<input type="file" name="pictures[]">
</form>
,使得用戶可以上傳最多5張圖片。我知道我可以用<input type="file" name="pictures[]" multiple>
這樣做,但是我的想法是,我希望用戶能夠從他們的設備的不同文件夾中選擇文件,因此我以上述格式編寫的原因。
現在,我現在面臨的挑戰是,並非所有的輸入都是必需的,並且當提交表單時,我會執行正常輸入檢查$_FILES['pictures']['name]
,它循環遍歷所有文件數組,這是正常的他們有相同的名字。
現在我的頭痛..
- 我如何驗證只,同時保持所需的視野中的一個輸入一個文件中的投入?
現在,如果我在輸入框中添加少於5個文件時進行了檢查$_FILES['pictures']['name']
,由於未輸入輸入字段,它將返回一個錯誤。
編輯
首先,我可以檢查是否進入至少一個文件,然後我檢查是否有任何的文件不返回任何錯誤。看到我的代碼如下:
if (count($_FILES['pictures']['name']) < 1) {
echo "Please enter at least one image";
}
elseif ($_FILES['pictures']['error'] != 0) {
echo "Sorry, one or more of your uploaded images is invalid";
}
現在,如果不是所有5個輸入字段都輸入,表單將始終返回一個錯誤。
ANOTHER編輯
也許我無法清楚地解釋我想實現..但這裏的要點。
除此之外,一個輸入是必需的,當表單沒有所有的領域提交的進入,我做類似這樣(跳過所需的檢查)的事實:
$files = array();
$fileData = $_FILES['pictures'];
$files = array();
if (is_array($fileData['name'])) {
for ($i=0; $i < count($fileData['name']) ; ++$i) {
$files[] = array(
'name' => $fileData['name'][$i],
'tmp_name' => $fileData['tmp_name'][$i],
'type' => $fileData['type'][$i],
'error' => $fileData['error'][$i],
'size' => $fileData['size'][$i],
);
}
}
else {
$files[] = $fileData;
}
所以當我執行驗證時,如:
foreach ($files as $file) {
if ($file['name'] == '') {
echo "Error";
}
}
,並且用戶沒有輸入所有圖像,它會返回錯誤消息。
的$files
回報的print_r()
這樣的:
Array
(
[photos] => Array
(
[name] => Array
(
[0] => 11356010_127900540886840_1152019271_n.jpg
[1] => 11370980_130679033939470_1067474802_n.jpg
[2] =>
[3] =>
[4] =>
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
[2] =>
[3] =>
[4] =>
)
[tmp_name] => Array
(
[0] => C:\xampp7\tmp\php1C9F.tmp
[1] => C:\xampp7\tmp\php1CaF.tmp
[2] =>
[3] =>
[4] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 4
[3] => 4
[4] => 4
)
[size] => Array
(
[0] => 108492
[1] => 108492
[2] => 0
[3] => 0
[4] => 0
)
)
[files] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)
有沒有辦法做我檢查時,我可以使空字段被忽略?
我知道我可以通過檢查空字段並在提交時添加disabled
的屬性來做到這一點,但如果用戶在他/她的瀏覽器中關閉了javascript,會發生什麼?
我使用array_filter()
像這樣嘗試:
$filtered = array_filter($_FILES['pictures'], function($var){
return !empty($var['pictures']['name']);
});
,但它返回一個空數組。有人能請我指出正確的方向嗎?
如果事情便被輸入然後'name'關鍵不是空的。如果輸入和上傳成功,那麼'error'鍵是0. –
是的,但是如果上傳的文件少於5個,並且我檢查文件名爲空的'name',它會返回一個錯誤,因爲其他輸入沒有輸入。 –
我看不到檢查的代碼,我幫不了你。 –