2013-05-16 2 views
0

У меня есть форма для загрузки, которая позволяет мне добавить столько файлов, сколько необходимо. Однако, когда я пытаюсь загрузить файлы, я получаю сообщение об ошибке.Codeigniter, загружая несколько файлов с тем же именем

Контроллер

$this->load->library('upload'); 
$error = ""; 
$file = ""; 
$this->total_count_of_files = count($_FILES['user_certificates']['name']); 
print_r($_FILES['user_certificates']['name']); 

for($i=0; $i<$this->total_count_of_files; $i++) 
{ 
    $_FILES['user_certificates']['name'] = $_FILES['user_certificates']['name'][$i]; 
    $_FILES['user_certificates']['type'] = $_FILES['user_certificates']['type'][$i]; 
    $_FILES['user_certificates']['tmp_name'] = $_FILES['user_certificates']['tmp_name'][$i]; 
    $_FILES['user_certificates']['error'] = $_FILES['user_certificates']['error'][$i]; 
    $_FILES['user_certificates']['size'] = $_FILES['user_certificates']['size'][$i]; 

    $config['encrypt_name'] = TRUE; 
    $config['file_name'] = $_FILES['user_certificates']['name']; 
    $config['upload_path'] = './certificate_files/'; 
    $config['allowed_types'] = 'txt|pdf|doc|docx'; 
    $config['max_size'] = 0; 

    $this->upload->initialize($config); 

    if (!$this->upload->do_upload()) 
    { 
     $status = 'error'; 
     $msg = $this->upload->display_errors(); 
    } 
    else 
    { 
     $data = $this->upload->data(); 
     $file = $data['raw_name'] . $data['file_ext']; 
    } 
    if($file) 
    { 
     $status = "success"; 
     $msg = "Image successfully uploaded"; 
    } 
    else 
    { 
     $status = "error"; 
     $msg = "Something went wrong when saving the image, please try again."; 
    } 
} 
echo json_encode(array('status' => $status, 'msg' => $msg)); 
exit(); 

print_r($_FILES['user_certificates']['name'])) показывает мне файлы я добавил:

Array ([0] => license.txt [1] => license.txt) 

Я полностью застрял на том, как получить загрузки на работу. Есть идеи?

Приветствия заранее!

EDIT

Если изменить это:

if (!$this->upload->do_upload()) 

к этому:

if (!$this->upload->do_upload('user_certificates')) 

это работает, но только для одного файла, это не кажется округлять петли снова по какой-то причине

+0

Что вы ** ** ошибка ** вы получаете ??? –

+0

Файл не загружается в любую папку, а «echo json_encode (array ('status' => $ status, 'msg' => $ msg)); показывает '{"status": "error", "msg": "Что-то пошло не так, когда вы сохранили файл, попробуйте еще раз."}'. Таким образом, ошибка возникает из-за инициализации конфигурации. Есть идеи? – Pooshonk

+0

Кажется, что ваш файл загружается, но откуда вы устанавливаете значение для '$ data ['raw_name']' ??? –

ответ

2

Ваши петли кажутся неправильными.

... 
$_FILES['user_certificates']['name'] = $_FILES['user_certificates']['name'][$i]; 
... 

эти строки перезаписывает исходный массив $ _FILES, поэтому после завершения первого цикла, он не найдет что-нибудь еще в цикле, потому что он был перезаписан.

Вместо этого вы можете сначала сохранить массив $ _FILES в локальную переменную и пропустить его, чтобы загрузить по одному.

+0

Любая идея, как я буду исправлять это? – Pooshonk

+1

Как я и предположил, вы можете сохранить $ _FILES в переменной temp перед запуском цикла, например $ temp = $ _FILES, и запрограммировать цикл $ temp, а затем внутри цикла инициализировать переменную $ _FILES с помощью переменной temp. Попробуйте. Если это не сработает, сообщите мне. –

+0

Ах отлично, это сработало! Большое спасибо, такое небольшое изменение имеет огромное значение! – Pooshonk

Смежные вопросы