2015-04-20 3 views
-2

ФормаОшибка при загрузке изображения и переименования в PHP

<form action="product.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="image" class="input3" multiple> 
<input type="submit" value="Add Product" name="submit" class="button2"> 
</form> 

product.php

$image = $_FILES['image']; 
$i = 1 ; 
foreach ($image as $new_image) 
    { 
     print_r($new_image); 
     echo '<br>'; 
     $dir_path_up = 'assets/images/product_images/'.$model."/"; 
     $target_file = $dir_path_up . basename($new_image); 
     $new_name= $dir_path_up .$i.".jpg"; 
     move_uploaded_file($_FILES["image"]["tmp_name"], $new_name); 

     $i++; 
    } 

Я выше кода, чтобы переименовать файл и загрузить изображение на конкретные ($ модель) каталога. Все выглядит идеально, при загрузке одного изображения. Но когда я загружаю больше, чем Single Image, последнее изображение получает только переименование и загрузка. (Пример: если я загружаю 3 изображения, последнее изображение получает только загрузку, и оно становится переименовываемым как 1.jpg. Остальные изображения не загружаются.)

Это что-то не так в этом ?? Я поражаюсь этому.

+0

Что ваша форма загрузки выглядеть? –

+0

отправить полный код вашего представления и php – Saty

+0

ответ

3

При загрузке изображений последнее изображение будет загружено только по той причине, что вы неправильно обрабатываете его. Попробуйте print_r($_FILES) перед этим, чтобы увидеть фактическую структуру.

  1. Вы должны использовать

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

  2. Структура выборки вы должны иметь:

Массив (

[image] => Array 
    (

     [name] => Array 
      (

       [0] => architectural-245a.jpg 

       [1] => BeaverMeadow_EN-US12190942812_1920x1200.jpg 

       [2] => cool-chelsea-wallpaper-25403-26085-hd-wallpapers.jpg 
      ) 

     [type] => Array 
      (
       [0] => image/jpeg 
       [1] => image/jpeg 
       [2] => image/jpeg 
      ) 

     [tmp_name] => Array 
      (
       [0] => D:\xampp\tmp\phpE4FF.tmp 
       [1] => D:\xampp\tmp\phpE52F.tmp 
       [2] => D:\xampp\tmp\phpE54F.tmp 
      ) 

     [error] => Array 
      (
       [0] => 0 
       [1] => 0 
       [2] => 0 
      ) 

     [size] => Array 
      (
       [0] => 689711 
       [1] => 642453 
       [2] => 396336 
      ) 

    ) 

)

Тогда вы можете обращаться с ним соответствующим образом.

+0

В этом тоже я получаю последнее вставленное изображение. –

+0

Array ([image] => Array ([name] => 3-Floor-standing-LCD-AD-Display.jpg [type] => image/jpeg [tmp_name] => C: \ xampp \ tmp \ php8938. tmp [error] => 0 [size] => 2816)) –

+0

Вы получаете все свои изображения в вышеуказанном формате (тот, который я вам предоставил)? –

1

Попробуйте этот код:

Первая проблема связана с именем input(type= file) поля вы приняли для загрузки файла. ваша форма фактически загружает только один файл, который был выбран в конце. Вот почему вы столкнулись с этой проблемой.

Так решить эту проблему переименовать его как image[]

<form action="" method="post" enctype="multipart/form-data"> 
     <input type="file" name="image[]" class="input3" multiple> <!-- As you are uploading multiple file so u have to define name as array like =image[] --> 
     <input type="submit" value="Add Product" name="submit" class="button2"> 
    </form> 

    <?php 

    if(isset($_POST['submit'])){ 
     $image = $_FILES['image']; 
     $image = reArrayFiles($image); /* use this function to create a proper $_FILES['image'] array format*/ 
     $i = 1 ; 
     foreach ($image as $new_image) 
      { 
       print_r($new_image); 
       echo '<br>'; 
       $dir_path_up = "upload"; 
       $target_file = $dir_path_up . basename($new_image['name']); 
       $new_name= $dir_path_up .$i.".jpg"; /*if you use .jpg here then all the files will be converted into .jpg even if user uploads a txt file or other*/ 
       move_uploaded_file($new_image["tmp_name"], $new_name); 
       $i++; 
      } 
    } 

    function reArrayFiles(&$file_post) { 

     $file_ary = array(); 
     $file_count = count($file_post['name']); 
     $file_keys = array_keys($file_post); 

     for ($i=0; $i<$file_count; $i++) { 
      foreach ($file_keys as $key) { 
       $file_ary[$i][$key] = $file_post[$key][$i]; 
      } 
     } 

     return $file_ary; 
    } 
    ?> 
Смежные вопросы