2011-03-02 155 views
1

我創建了一個表單,允許用戶將多個文件上載到目錄。現在我試圖從表單輸入字段中獲取文件的名稱並將它們存儲到數據庫中。將表單值從數組插入到數據庫中

我想獲得輸入字段的數組值,即; ['file'] ['name']和['file'] ['tmp_name']並將它們插入到數據庫中。在下面的代碼中,我只設法將「數組」這個詞插入到數據庫中,而不是文件本身的實際名稱。

我想我需要使用foreach循環遍歷數組,但我不確定如何去編寫它以及將它插入到我的代碼中。以下是目前爲止的代碼:

#connect to the database 
    mysql_connect("localhost", "root", ""); 
    mysql_select_db("masscic"); 

    //Upload Handler to check image types 
    function is_image($file) { 

    $file_types = array('jpeg', 'gif', 'bmp'); //acceptable file types 

    if ($img = getimagesize($file)){ 

     //echo '<pre>'; 
     //print_r($_FILES); //will return an array of information for testing 
     //print_r($img); //will return an array of information for testing 

     if(in_array(str_replace('image/', '', $img['mime']), $file_types)) 
     return $img; 
    } 
    return false; 
} 
    //form submission handling 
    if(isset($_POST['submit'])) { 

    //file variables 

    $fname = $_FILES['files']['name']; 
    $ftype = $_FILES['files']['type']; 
    $fsize = $_FILES['files']['size']; 
    $tname = $_FILES['files']['tmp_name']; 
    $ferror = $_FILES['files']['error']; 
    $newDir = '../uploads/'; //relative to where this script file resides 

    for ($i = count($fname) -1; $i >=0; $i--) { 
     if ($ferror[$i] =='UPLOAD ERR OK' || $ferror[$i] ==0) 

     { 

      if(is_image($tname[$i])) 
      { 
       move_uploaded_file($tname[$i], ($newDir.time().$fname[$i])); 
       echo '<li><span class="success">'.$fname[$i].' -- image has been accepted<br></span></li>'; 

      }else 
       echo '<li><span class="error">'.$fname[$i].' -- is not an accepted file type<br></span></li>'; 
     } 
    } 
} 
      $sqlInsert = mysql_query("INSERT INTO files (file_names) VALUES('$fname')") or die (mysql_error()); 

感謝您的任何幫助。

回答

0

當上傳多個文件(具有相同的字段名稱)時,將向該數組添加另一個維度。說我上傳a.html和b.html,我會得到:

$_FILES['files']['name'][0]; // a.html 
$_FILES['files']['name'][1]; // b.html 
$_FILES['files']['size'][0]; // size of a.html 
$_FILES['files']['size'][1]; // size of b.html 

要遍歷:

for(var $i = 0; $i < count($_FILES['files']['name']); $i++) { 
    echo 'File name ' . $_FILES['files']['name'][$i] . ' has size ' . $_FILES['files']['size'][$i]; 
} 

這是在http://www.php.net/manual/en/features.file-upload.multiple.php

+0

您好解釋。我已經廣泛閱讀了該頁面,但我不太明白。這就是爲什麼我想到一個「foreach」循環。你是說我應該用我的循環取代上面的循環嗎?如果是這樣,你的for循環會給出一個分析錯誤。 – 2011-03-03 00:52:02

+0

我修復瞭解析錯誤,並將其插入到數據庫中,但它創建了三個單獨的記錄。即如果用戶上傳三個文件,則會在數據庫中創建三個單獨的記錄。我想要將所有三個文件作爲一個記錄計入數據庫中名爲「files」的一個數據庫列中。 – 2011-03-03 01:33:59