Ошибка загрузки нескольких изображений одновременно.

Я пытаюсь загрузить несколько фотографий одновременно, но, похоже, с моим скриптом возникает ошибка. Если, например, я выбираю 10 разных фотографий, одно изображение загружается 10 раз (игнорируя остальные 9 изображений). Это сценарий:

for ($i = 0; $i < count($_FILES["_photo"]["name"]); $i++) {  
    if (!empty($_FILES['_photo']['name'][$i])) {

    if (($_FILES['_photo']['type'][$i] == 'image/jpeg') OR ($_FILES['_photo']['type'][$i] == 'image/png') OR ($_FILES['_photo']['type'][$i] =='image/gif')) {
        $upload_folder = "./profile_pix/";
        $pic_name = time() . ".jpg";
        $pic_path = $upload_folder . $pic_name;

        require_once "include/resize.php";
        if (move_uploaded_file($_FILES['_photo']['tmp_name'][$i], $pic_path)) {
            $image = new Resize($pic_path);
            $image->resizeImage(180, 180, 'crop');
            $image->saveImage($pic_path);

        }
            $sql2 = "INSERT INTO photos
            (photo, member_id, photo_id)
             VALUES
            ('$pic_name', :session_id, :offer_count)";
            $db -> query($sql2, array('session_id' => $_SESSION['id'], 'offer_count' => $offer_count));
    }else {
            header ("Location: submitoffer.php?err=03");
        }


    }

HTML:

<input type="file" id="_photo"  name="_photo[]" multiple="multiple">
1
08 июля '15 в 15:01
источник поделиться
3 ответов

Загрузка файлов работает нормально.

Линия

$pic_name = time() . ".jpg";

всегда оценивает одно и то же значение.

Как логически все файлы загружаются в одно и time() же time().

Вместо этого используйте:

$pic_name = $i . '_'. time() . ".jpg";

Добавить уникальность.

1
08 июля '15 в 15:13
источник

100% работающий и проверенный код:

upload.php:

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST') {
  if(isset($_FILES['files'])){
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
      $file_name  = $_FILES['files']['name'][$key];
      $file_size  = $_FILES['files']['size'][$key];
      $file_tmp   = $_FILES['files']['tmp_name'][$key];
      $file_type  = $_FILES['files']['type'][$key];  
      if($file_type == "image/jpg" || $file_type == "image/png" || $file_type == "image/jpeg" || $file_type == "image/gif" ) {      
        move_uploaded_file($file_tmp,"uploads/".$file_name);        
      }   
    }
    header('location:uploads.html'); 
  }
}
else { header('location:404.html'); }
?>

upload.html

<form id="upload_images" action="upload.php" method="POST"  enctype="multipart/form-data">
      <input type="file" name="files[]" id="file" multiple="true" />                
      <input type="submit" id="btn_upload"  value="U P L O A D" />
</form>
0
08 июля '15 в 15:26
источник

попробуйте это, и вы увидите, что происходит:

<?php
    echo "<pre>";
    print_r($_FILES);
    echo "</pre>";
?>

И в своем HTML, убедитесь, что вы используете разные имена, например:

<input name="userfile[]" type="file" />
<input name="userfile[]" type="file" />
<input name="userfile[]" type="file" />

Затем заберите их по каждому имени. Просто ознакомьтесь с содержанием $ _FILES, чтобы понять структуру.

Я также советую вам серьезно проверить некоторые ошибки.

0
08 июля '15 в 15:10
источник

Посмотрите другие вопросы по метке или Задайте вопрос