Возникли проблемы с загрузкой нескольких файлов в одном запросе с использованием dropzone - PullRequest
0 голосов
/ 29 марта 2019

Пытаюсь обновить столбец базы данных пользовательских изображений с помощью плагина dropzone в одном запросе, но когда я установил для uploadMultiple значение true, не работает ни изображение, ни папка, ни база данных. Но когда я установил его в false, только последнее имя изображения перемещается в столбец изображения пользователя, но все изображения перемещаются в папку.

Заранее спасибо

Вот мой код

 Dropzone.options.mydropzone =
  {
      autoProcessQueue: false,
     addRemoveLinks: true,
      dictMaxFilesExceeded: "Maximum upload limit reached",
       dictInvalidFileType: "upload only JPG/PNG/JPEG/GIF/BMP",
    acceptedFiles: '.png,.jpg,.jpeg,.gif,.bmp',
        parallelUploads: 10,
          // uploadMultiple: true,
     init: function ()
    {
      var submitButton = document.querySelector('#letupload');
       myDropzone = this;


        submitButton.addEventListener("click", function(){
           myDropzone.processQueue();
        });


       this.on("complete", function(){
      if (this.getQueuedFiles().length == 0 && this.getUploadingFiles().length == 0) 
      {
        var _this = this;
        _this.removeAllFiles();
      }
      //console.log(this.getUploadingFiles());
    });

    },

  };

Сторона сервера

if (!empty($_FILES)) {

  $temp_file = $_FILES['file']['tmp_name'];
  $targetDir = '../../user_images/';
  $filename = rand().$_FILES['file']['name'];
  $targetFile = $targetDir.$filename;


 if (move_uploaded_file($temp_file, $targetFile)) {

      $sql="UPDATE img SET Image='$filename' WHERE User_id = '$memberid' ";//
if(!$qsql=mysqli_query($con,$sql))
{
  echo mysqli_error($con);
}

  } 


}

После того, как Мохаммед связал все изображения с целевой папкой, но только последнее изображение сохранилось в этой базе данных. Ниже приведен мой новый код на стороне сервера

if (!empty($_FILES)) {


foreach($_FILES['file']['tmp_name'] as $key => $value) {
        $temp_file = $_FILES['file']['tmp_name'][$key];
        $targetDir = '../../user_images/';
        $filename = rand().$_FILES['file']['name'][$key];
        $targetFile =  $targetDir.$filename;

        if (move_uploaded_file($temp_file,$targetFile)) {
         $sql="UPDATE img SET Image='$filename' WHERE User_id = '$memberid' ";//
        if(!$qsql=mysqli_query($con,$sql))
        {
          echo mysqli_error($con);
        }
        }
    }

}

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Вы обновляете на каждой итерации, поэтому значением в конце скрипта будет имя последнего загруженного изображения, поэтому есть способ решить эту проблему, используя следующий фрагмент кода:

  • Вставьте в массив (я назвал id $ images) имя загруженного файла. файлы.

  • преобразовать массив в пружину через запятую, используя implode функция. (я использовал ту же переменную $ images).

  • обновить строку с именем изображения.

Пример кода:

if (!empty($_FILES)) {
   $images=array[];
  foreach($_FILES['file']['tmp_name'] as $key => $value) {
      $temp_file = $_FILES['file']['tmp_name'][$key];
      $targetDir = '../../user_images/';
      $filename = rand().$_FILES['file']['name'][$key];
      $targetFile =  $targetDir.$filename;
      if (move_uploaded_file($temp_file,$targetFile)) {
         $images[]= $filename;
      }
  }
  $images = implode(',',$images);
  $sql="UPDATE img SET Image='$images' WHERE User_id = '$memberid' ";//
  if(!$qsql=mysqli_query($con,$sql)){
     echo mysqli_error($con);
  }

}

Надеюсь, это поможет вам.

0 голосов
/ 29 марта 2019

Благодаря @Mohammed после того, как я попробую ваш код, проблема сохранения имени изображений в базе данных все еще сохраняется, теперь я обнаружил, что вы объявляете пустой массив внутри foreach , поэтому ниже рабочий код

Dropzone Js

  Dropzone.options.mydropzone =
  {

    autoProcessQueue: false,
     addRemoveLinks: true,
      dictMaxFilesExceeded: "Maximum upload limit reached",
       dictInvalidFileType: "upload only JPG/PNG/JPEG/GIF/BMP",
    acceptedFiles: '.png,.jpg,.jpeg,.gif,.bmp',
        parallelUploads: 10,
          uploadMultiple: true,
     init: function ()
    {
      var submitButton = document.querySelector('#letupload');
       myDropzone = this;


        submitButton.addEventListener("click", function(){
           myDropzone.processQueue();
        });

      this.on("complete", function(file, response){
      if (this.getQueuedFiles().length == 0 && this.getUploadingFiles().length == 0) 
      {
        var _this = this;
        _this.removeAllFiles();
      }
      console.log(this.getUploadingFiles());
    });

    },


  };

Серверная сторона

if (!empty($_FILES)) {

$empty_img_arr=array();
foreach($_FILES['file']['tmp_name'] as $key => $value) {
      $temp_file = $_FILES['file']['tmp_name'][$key];
      $targetDir = '../../user_images/';
      $filename = rand().$_FILES['file']['name'][$key];
      $targetFile =  $targetDir.$filename;

      if (move_uploaded_file($temp_file,$targetFile)) {


       $empty_img_arr[]= $filename;

       $image = implode(',',$empty_img_arr);
    $sql="UPDATE img SET Image='$image' WHERE User_id = '$memberid' ";//
      if(!$qsql=mysqli_query($con,$sql))
      {
        echo mysqli_error($con);
      }

      }
  }

}

Большое спасибо, очень ценю

...