2017-10-16 5 views
0

複数のファイルをアップロードしていて、その詳細をSQLデータベースに保存しようとしていますが、最初のファイルのみがアップロードされ、私はfile1を選択した場合、例えば、PHP複数のファイルをSQLにアップロードすると、最初のファイルのみがアップロードされます

if(isset($_POST['btn-upload'])){  
    if (($_FILES['my_file']['name']!="")){ 
     for ($i = 0 ; $i < count($_FILES['my_file']['name']) ; $i++){ 
     $target_dir = "upload_test/"; 
     $file = $_FILES['my_file']['name'][$i]; 
     $path = pathinfo($file); 
     $ext = $path['extension']; 
     $target_dir = $target_dir.basename($file); 
     $user = "xxx"; 

     if(insertFile_info(basename($file) , $target_dir, $user, $ext, $conn)){ 
      echo "Insert file success"; 
     }else{ 
      echo "Insert Failed"; 
     } 
     } 
    } 
} 

:ファイルにそのような名前や種類などの情報をアップロードするための

<form method="post" enctype="multipart/form-data"> 
    <input name="my_file[]" type="file" id="userfile" multiple> 
    <button type="submit" name="btn-upload">upload</button> 
</form> 

私のPHPコード:ここで

フォームで複数のファイルをつかむために私のHTMLです、file2 & file3file1の情報のみがdbに挿入されますが、file2 & file3はデータベースにまったく挿入されませんでした。

ここで問題は何ですか?ここで

は私のinsertメソッドです:

function insertFile_info ($file_name , $path, $username, $type, $conn){ 
    $sql = "INSERT INTO URL (file_name, path, username, type) VALUES (?, ?, ?, ?);"; 
    $params = array($file_name , $path, $username, $type); 
    if (sqlsrv_query($conn, $sql, $params) === TRUE) { 
     // success 
    } else { 
     die(print_r(sqlsrv_errors(), true)); 
    } 
} 
+0

これが役立つかどうかを確認してください。 https://stackoverflow.com/questions/13270210/upload-multiple-files-to-server-and?rq=1 –

+0

'' 'echo count($ _ FILES ['my_file'] ['name']の出力は何ですか? ) '' ' –

+0

@WalkerBoh数は3です、私もすべてのファイル名とパスを印刷することができます。 –

答えて

0

あなたの問題は、それ自体を解くように聞こえるが、私はとにかくあなたのコードのための提案を投稿します。クエリの準備には多くのオーバーヘッドが使用されます。クエリを複数回実行する場合は、一度だけ準備する必要があります。

// initialize the variables 
$params = array($file = "", $target_dir = "", $user = "", $ext = ""); 
$sql = "INSERT INTO URL (file_name, path, username, type) VALUES (?, ?, ?, ?);"; 
// prepare the statement, it's now bound to the variables 
$stmt = sqlsrv_prepare($conn, $sql); 

if (isset($_POST['btn-upload'] && count($_FILES['my_file']['name'])) { 
    foreach ($_FILES['my_file']['name'] as $i => $file) { 
     $target_dir = "upload_test/$file"; 
     $user = "xxx"; 
     $ext = pathinfo($file, PATHINFO_EXTENSION); 
     $file = basename($file); 
     // now execute the query with the value in the variables 
     if (!sqlsrv_execute($stmt)) { 
      echo "Insert file failure"; 
      // of course, this is just for testing... 
      print_r(sqlsrv_errors()); 
      die(); 
     } 
     echo "Insert file success"; 
    } 
} 
関連する問題