AJAX PHP上传文件问题

时间:2017-07-01 01:58:28

标签: php jquery ajax upload

我使用在ajax中添加更多文件上传多个文件并将其保存在php中的数据库中。但它只插入数据库中的最后一个文件而不是数据库中的多个文件。

HTML代码

<form id="registration_form" method="post" enctype="multipart/form-data">
   <input type="file"   id="file" name="file[]">
   <input type="button" id="add_more" class="upload" value="Add More Files"/>
</form>

AJAX代码

$(document).ready(function() {
    //  To add new input file field dynamically, on click of "Add More Files" button below function will be executed.
    $('#add_more').click(function() {
    $(this).before($("
    <div id='filediv'/>
    ").append($("<input name='file[]' type='file' id='file'>"
    )));
    $.ajax({
    url:"update.php",
    type:"post",
    data: new FormData(this),
    contentType:false,
    cache:false,
    processData:false,
    success:function(data)
    {
    alert(data);
    },
    failure:function(errormsg)
    {
    alert(errormsg);
    }
    });
});`

PHP代码

 <!------- Including PHP Script here ------>
 <?php if (isset($_POST['submit'])) {
   $j = 0;     // Variable for indexing uploaded image.
   $target_path = "upload/";     // Declaring Path for uploaded images.
   for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
   // Loop to get individual element from the array
   $validextensions = array("jpeg", "jpg", "png");      // Extensions which are allowed.
   $ext = explode('.', basename($_FILES['file']['name'][$i]));   // Explode file name from dot(.)
   $file_extension = end($ext); // Store extensions in the variable.
   $target_path = $target_path  . $_FILES['file']['name'][$i];  
   //echo $target_path; die;   // Set the target path with a new name of image.
   $j = $j + 1;      // Increment the number of uploaded images according to the files in array.
   if (($_FILES["file"]["size"][$i] < 800000)     // Approx. 800kb files can be uploaded.
   && in_array($file_extension, $validextensions)) {
   if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $target_path)) {
   // If file moved to uploads folder.
   echo $j. ').<span id="noerror">Image uploaded successfully!.</span><br/><br/>';
   } else {     //  If File Was Not Moved.
   echo $j. ').<span id="error">please try again!.</span><br/><br/>';
   }
   } else {     //   If File Size And File Type Was Incorrect.
   echo $j. ').<span id="error">***Invalid file Size or Type***</span><br/><br/>';
   }
   }
   } ?>

1 个答案:

答案 0 :(得分:0)

您需要附加所有文件以形成数据。试试这个

var data = new FormData();

$.each($("input[type='file']")[0].files, function(i, file) {
    data.append('file', file);
});

将此数据变量传递给ajax数据。