2014-11-03 44 views
0

我有這個問題,當我上傳圖片在數據庫中。當我插入查詢,我只有一個點擊3行。這是HTML文件:在同一張表中上傳multy文件時出錯

<form action="my_parser.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="file_array[]"> 
<input type="file" name="file_array[]"> 
<input type="file" name="file_array[]"> 
    <input type="submit" value="Upload all files"> 
</form> 

,這是我的PHP代碼:

<? 
include "../include/config.php"; 

?> 

<? 
if(isset($_FILES['file_array'])){ 
    $id = $_REQUEST['id']; 
    $name_array = $_FILES['file_array']['name']; 
    $tmp_name_array = $_FILES['file_array']['tmp_name']; 
    $type_array = $_FILES['file_array']['type']; 
    $size_array = $_FILES['file_array']['size']; 
    $error_array = $_FILES['file_array']['error']; 
    $image1 = $name_array[0]; 

     for($i = 0; $i < count($tmp_name_array); $i++){ 
     if(move_uploaded_file($tmp_name_array[$i], 
      "test_uploads/".$name_array[$i])){ 
      echo $name_array[$i]." upload is complete<br>"; 

      $add = mysql_query("insert into nn values ('  ','$image1','','')"); 

      echo "<img src='test_uploads/$image1'>"; 
      } else 
       { echo "move_uploaded_file function failed for ".$name_array[$i]."<br>"; 
      } 
      } 
      } 
      ?> 

在數據庫表NN有此列。 id - image1 - image2 - image3。 謝謝

+1

這看起來可怕,不安全,因爲你的用戶參數不[正確轉義(HTTP://鮑比桌。 COM/PHP)。您應該**絕不**將'$ _POST'數據直接放入查詢中。這造成了一個巨大的[SQL注入漏洞](http://bobby-tables.com/)。另外,'mysql_query'是一個過時的接口,不應該被使用,它將被從PHP中刪除。像[PDO這樣的現代化替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP The Right Way](http://www.phptherightway.com/)這樣的指南解釋了最佳實踐。 – tadman 2014-11-03 19:56:12

回答

0

讓我們來清理一下。

讓我們設置數據庫連接。在這個例子中,我們正在轉向mysqli。然後我們將處理移動文件,並將文件路徑存儲在數據庫中。

$conn = new mysqli('host', 'user', 'pass', 'db'); 

if(isset($_FILES['file_array'])): 
    $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : false; 
    if($id): 
     $file_array = $_FILES['file_array']; 
     for($i = 0; $i < count($file_array['tmp_name']); $i++): 
      if(move_uploaded_file($file_array['tmp_name'][$i], 'test_uploads/'.$file_array['name'][$i])): 
       $stmt = $conn->prepare("insert into nn values('', ?, '', '')"); 
       $stmt->bind_param('s', $file_array['name'][$i]); 
       if($stmt->execute()): 
        echo $file_array['name'][$i].' has been uploaded successfully.'; 
       else: 
        echo 'Failed to upload '.$file_array['name'][$i].'. Please check the file and try again!'; 
        return false; 
       endif; 
      endif; 
     endfor; 
    endif; 
endif; 

沒有理由創建所有那些凌亂的變量。我們已經遷移到了MySQLI,它現在支持,並且我們已經使用了一個準備好的語句來確保圖像的名稱不是惡意的,可能對我們的應用程序不利。

資源