2010-04-28 46 views
0

海 我有包含這樣動態生成的文件上傳控件<使用javascript>不發佈?

<tr><td> <input name="ufile[]" type="file" id="ufile[]" size="50" /></td></tr> 

在文件類型的表單提交我打電話的腳本

function addRowToTable() 
    { 
     var tbl = document.getElementById('uploadTab'); 
     var lastrow = tbl.rows.length; 
     var iteration = lastrow; 
     var row = tbl.insertRow(lastrow); 

     var cell2 = row.insertCell(0); 
     var e2 = document.createElement('input'); 
     e2.type = 'file'; 
     e2.name = 'ufile[]'; 
     e2.id = 'ufile[]'; 
     e2.size='50'; 
     cell2.appendChild(e2); 
    } 

這個腳本生成按鈕上的TR點擊......在我鑑於generatedsource工具,我得到了「」像這樣

<tr><td><input size="50" id="ufile[]" name="ufile[]" type="file"></td></tr> 

當我提交表單我不爲生成的文件類型得到的文件名我n我的查看頁面 但是我得到的文件名是默認的文件名 可能是什麼問題?

我張貼我的表格此頁,

<?php 
//set where you want to store files 
//in this example we keep file in folder upload 
//$HTTP_POST_FILES['ufile']['name']; = upload file name 
//for example upload file name cartoon.gif . $path will be upload/cartoon.gif 
$path1= "upload/".$HTTP_POST_FILES['ufile']['name'][0]; 
$path2= "upload/".$HTTP_POST_FILES['ufile']['name'][1]; 
$path3= "upload/".$HTTP_POST_FILES['ufile']['name'][2]; 
$path4= "upload/".$HTTP_POST_FILES['ufile']['name'][3]; 

//copy file to where you want to store file 
copy($HTTP_POST_FILES['ufile']['tmp_name'][0], $path1); 
copy($HTTP_POST_FILES['ufile']['tmp_name'][1], $path2); 
echo copy($HTTP_POST_FILES['ufile']['tmp_name'][2], $path3); 

//$HTTP_POST_FILES['ufile']['name'] = file name 
//$HTTP_POST_FILES['ufile']['size'] = file size 
//$HTTP_POST_FILES['ufile']['type'] = type of file 
echo "File Name :".$HTTP_POST_FILES['ufile']['name'][0]."<BR/>"; 
echo "File Size :".$HTTP_POST_FILES['ufile']['size'][0]."<BR/>"; 
echo "File Type :".$HTTP_POST_FILES['ufile']['type'][0]."<BR/>"; 
echo "<img src=\"$path1\" width=\"150\" height=\"150\">"; 
echo "<P>"; 

echo "File Name :".$HTTP_POST_FILES['ufile']['name'][1]."<BR/>"; 
echo "File Size :".$HTTP_POST_FILES['ufile']['size'][1]."<BR/>"; 
echo "File Type :".$HTTP_POST_FILES['ufile']['type'][1]."<BR/>"; 
echo "<img src=\"$path2\" width=\"150\" height=\"150\">"; 
echo "<P>"; 

echo "File Name :".$HTTP_POST_FILES['ufile']['name'][2]."<BR/>"; 
echo "File Size :".$HTTP_POST_FILES['ufile']['size'][2]."<BR/>"; 
echo "File Type :".$HTTP_POST_FILES['ufile']['type'][2]."<BR/>"; 
echo "<img src=\"$path3\" width=\"150\" height=\"150\">"; 

/////////////////////////////////////////////////////// 

// Use this code to display the error or success. 

$filesize1=$HTTP_POST_FILES['ufile']['size'][0]; 
$filesize2=$HTTP_POST_FILES['ufile']['size'][1]; 
$filesize3=$HTTP_POST_FILES['ufile']['size'][2]; 

if($filesize1 && $filesize2 && $filesize3 != 0) 
{ 
echo "We have recieved your files"; 
} 

else { 
echo "ERROR....."; 
} 

////////////////////////////////////////////// 

// What files that have a problem? (if found) 

if($filesize1==0) { 
echo "There're something error in your first file"; 
echo "<BR />"; 
} 

if($filesize2==0) { 
echo "There're something error in your second file"; 
echo "<BR />"; 
} 

if($filesize3==0) { 
echo "There're something error in your third file"; 
echo "<BR />"; 
} 

?> 

編輯 這是我的數組

Array ([ufile] => Array ([name] => Array ([0] => stripe.jpg [1] => stripe.jpg) [type] => Array ([0] => image/jpeg [1] => image/jpeg) [tmp_name] => Array ([0] => D:\xampp\tmp\php29A9.tmp [1] => D:\xampp\tmp\php29AA.tmp) [error] => Array ([0] => 0 [1] => 0) [size] => Array ([0] => 8717 [1] => 8717))) 
+1

因此,'$ _FILES'數組的完整轉儲沒有顯示任何第二個文件的提示? – 2010-04-28 07:11:52

+0

@Pekka看看我的編輯... – udaya 2010-04-28 07:13:42

+0

你可以做一個'print_r($ _ FILES)'並且一併發佈?您的腳本按順序排列,但只是爲了確保。 – 2010-04-28 07:14:31

回答

1

使用Firebug的右鍵>「檢查元素」,以確保新的輸入實際上是在你的形式的孩子。否則,它不會被髮送。

+0

@udaya如果你在動態字段中上傳真的很大的文件。是否需要適當的(很長)時間將請求發送到服務器? – 2010-04-28 07:19:56

+0

@udaya no我的意思是,故意上傳一個巨大的文件,看它是否被瀏覽器發送。但無論如何,我想我已經明白了,堅持下去,我會在一秒鐘內更新我的答案。 – 2010-04-28 07:25:47

+0

@udaya這些文件絕對都在那裏。作爲第一項措施,您可以將'$ HTTP_POST_FILES'更改爲'$ _FILES'嗎? – 2010-04-28 07:26:47

2

討厭陳述明顯,但你有沒有記得包括enctype屬性?

<form method="post" enctype="multipart/form-data" action="...php"> 

沒有這個,你永遠不會得到文件上傳;你只會看到文件名作爲提交的值。

<input name="ufile[]" type="file" id="ufile[]" size="50" /> 

id中包括方括號是無效的。選擇僅包含字母數字加上.-_id,並以字母開頭。如果您需要爲每個生成的元素添加id,請確保每次都有所不同。儘管據我所見,你實際上並沒有使用任何這些ID,所以你可以很容易地忽略它們。

$path1= "upload/".$HTTP_POST_FILES['ufile']['name'][0]; 

EXTREME危險。用戶可以將任何東西放在文件名中,包括..(上一個目錄)和活動文件類型如.php。永遠不要信任用戶提交的服務器文件系統上的文件名!要麼強烈地消毒它們(這比你想象的要難),或者更好的是,使用完全不相關的名稱來存儲它。

允許用戶上傳文件存在很大風險。進一步討論見this question

echo "File Name :".$HTTP_POST_FILES['ufile']['name'][0]."<BR/>"; 

這和每次你把一個文本字符串轉換成HTML,你需要調用htmlspecialchars()就可以了。否則,字符串中的<&字符可能包含標記(包括腳本),並且您有跨站點腳本安全漏洞。

+0

他必須有,因爲他在純HTML中的上傳領域工作正常。 – 2010-04-28 12:16:04

+0

我不知道,他只提到在問題中獲得'文件名',所以我不完全確定發生了什麼。 – bobince 2010-04-28 12:22:21

+0

'print_r'輸出中有文件大小和臨時文件,所以它們似乎被傳輸。至於其餘的,尖銳的眼睛先生! – 2010-04-28 12:24:07