2011-12-17 90 views
0

我有ZERO體驗,通過瀏覽器上傳文件,所以這部分對我來說都是非常新的。將多個文本文件上傳到MySQL

我需要給用戶(實際上他們將只有一兩個授權用戶)上傳多個文本文件(認爲50-200文件)直接進入MYSQL數據庫的方式。

我不想讓他們FTP訪問,但我確定允許他們輸入文件到數據庫中。

我可以弄清楚如何從一個PHP數組中獲取數據到MYSQL數據庫中。

我不明白的是如何獲取多個文件的內容到PHP數組中。

請幫忙拿出代碼。

+0

你有什麼這麼遠嗎? – 2011-12-17 21:27:46

+0

我什麼都沒有。就像我說的,我沒有編碼上傳部分的經驗。換句話說,我需要接口的代碼來上傳多個文件,以及可以用文本生成數組的PHP文件的一部分。我從那裏很好 – 2011-12-17 21:35:43

回答

3

這個例子會幫助你理解基本概念

<?php 
$fileContents = Array(); 

if(count($_FILES) != 0){ 
    foreach($_FILES as $file){ 
     $fp = fopen($file["tmp_name"], "r"); 
     array_push($fileContents, fread($fp, $file["size"])); 
     fclose($fp); 
    } 

    //$fileContents now holds all of the text of every file uploaded 
} 
?> 


<html> 
<head> 
</head> 
<body> 
    <form action="test.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file1" id="file" /> 
    <input type="file" name="file2" id="file" /> 
    <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 

它首先檢查是否存在已發佈到自己的文件。 如果存在文件,則循環遍歷每個文件並在它們處於其臨時文件狀態時打開它們。 之後,它使用與它一起發送的size屬性一次讀取所有內容(請注意這一點)。 同時,它將內容推入名爲$ fileContents的數組中。 因此,$ fileContents [0]包含第一個文本文件等。

+0

WOW。這看起來很酷。讓我嘗試一下。 – 2011-12-17 21:46:31

+0

這在文件到數組方面是完美的。謝謝你 – 2011-12-17 21:57:24

+0

沒有問題,如果你有任何問題只是在這裏發表 – John 2011-12-17 22:09:20

3

只需將更多<input type="file"> s添加到您的頁面,它們將全都出現在$_FILES數組中,您可以循環檢索它們。

但是:

另請參閱:Handling multiple file uploads in PHP

+0

該鏈接是超級有用的。有沒有辦法在文件選擇器中進行shift-clicks,以便您可以簡單地從單個鏈接中選擇多個文件? – 2011-12-17 21:45:42

+0

這將歸結於瀏覽器,而不是你的編碼 - 理論上,HTTP提供了這種可能性,但我沒有看到它實現得太多(實際上,我認爲我從未見過它) - 你可能會想要像[uploadify](http://www.uploadify.com/)那樣查看某種AJAX風格的上傳器。 – DaveRandom 2011-12-17 21:53:16

+0

@UnoMeinAme我一直在玩它,我不能讓IE8或IE9讓我選擇多個文件,不管我做什麼,如果IE不支持它,基本上意味着你不能做到這一點 - 即使其他瀏覽器支持它,通過不支持IE,你已經失去了大部分觀衆 – DaveRandom 2011-12-17 21:57:47

1
<!-- FORM --> 
<form method="post" enctype="multipart/form-data"> 
<?php 
for($i=1;$i<=10;$i++) //change 10 to any number for more upload fields 
{ 
    echo '<input type="file" name="files[]" /><br />'; 
} 
?> 
<input type="submit" name="submit" value="Submit" /> 
</form> 


<?php 
//Processor 
if(isset($_POST['submit'])) 
{ 
    foreach($_FILES['files']['tmp_name'] as $tmp_name) 
    { 
     if(!empty($tmp_name)) 
     { 
      $filecontent[] = file_get_contents($tmp_name); 
     } 
    } 

//Test 
echo '<pre>'; 
print_r($filecontent); 
echo '</pre>'; 
} 
?> 
1

謝謝大家對此有所貢獻的人。我很難選擇答案,因爲我認爲這是John和DaveRandom的50/50努力。

如果有人想看到最終產品在這裏它是:

HTML:

<html> 
<head> 
</head> 
<body> 
    <form method="post" action="test.php" enctype="multipart/form-data"> 
     <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 

PHP:

<?php 
    function rearrange($arr){ 
     foreach($arr as $key => $all){ 
      foreach($all as $i => $val){ 
       $new[$i][$key] = $val;  
      }  
     } 
     return $new; 
    } 

$fileContents = Array(); 

if(count($_FILES['filesToUpload'])) { 
    $realfiles=rearrange($_FILES['filesToUpload']); 

    foreach ($realfiles as $file) { 
      $fp = fopen($file["tmp_name"], "r"); 
      array_push($fileContents, fread($fp, $file["size"])); 
      fclose($fp); 
    } 

    foreach ($fileContents as $thisone) { 
     echo "<textarea wrap='off'>\n"; 
     echo $thisone; 
     echo "</textarea>\n"; 
     echo "<br>----<br>"; 

    } 
} 
?>