2014-05-21 2 views
0

Чтобы начать работу, я рассмотрел несколько подобных проблем здесь, но по-прежнему не могу решить эту проблему.Загрузка файла PHP не работает. Получение ошибки:

HTML:

<input type="file" name="filename" multiple="multiple" data-classIcon="icon-plus" data-buttonText="Upload Your File"> 

PHP:

$name = $_FILES['filename']; 
$temp_name = $_FILES['filename']['tmp_name']; 
if(isset($name)){ 
    if(!empty($name)){ 
     $location = 'uploads/'; 
     if(move_uploaded_file($temp_name, $location.$name)){ 
      echo 'uploaded'; 
     } 
    } 
} else { 
    echo 'error: not uploaded'; 
} 

JS:

$('#cc-submit').on('click', function(e){ 

      e.preventDefault(); 

      $.ajax({ 
       type: "POST", 
       url: "balanced/example.php", 
       data: $('#creditcardpost').serialize(), 
       success: function(data) 
       { 
        alert(data);     
       } 

      }); 
     }); 

Ошибка:

Undefined индекс: имя файла в /public_html/script.php на линии xx (две линии, которые собирать переменные $ _FILES.

"Ошибка: не загружен"

+2

Кажется, что $ _FILES не содержит ключа для 'filename'. Вы добавили в свой тег формы 'enctype = multipart/form-data'? – Chris

+0

Я просто добавил его, и проблема сохраняется. :( – IAteYourKitten

+0

Можете ли вы опубликовать свой тег формы? Можете ли вы также «print_r ($ _ FILES)» и посмотреть, что получится? Есть еще одна вещь, которую вы должны изменить на свой код. «Isset()» проверяет существование переменной, $ name всегда существует в вашем случае, является ли оно пустым или нет. Вместо этого используйте 'isset ($ _ FILES ['filename']). – Chris

ответ

0

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

$name = $_FILES['filename']['name']; 
+0

Выдает ту же ошибку. Это не проблема. – IAteYourKitten

+0

Я не думаю, что это правда, ему нужно использовать tmp_name, если он хочет переместить файл в другое место. 'name' содержит исходное имя файла. – Chris

+0

@IAteYourKitten Проверьте, использует ли ваша форма 'enctype = multipart/form-data'. –

0

Я print_r на $ _FILES и нашел мои файлы прибывали через как "файл-0". Я не делаю многофайлов, поэтому это работает для меня. И вот решение. PHP:

$name = $_FILES['file-0']['name']; 
$temp_name = $_FILES['file-0']['tmp_name']; 
     $location = '../uploads/';  
     if(move_uploaded_file($temp_name, $location.$name)){ 

     } 

print_r($name); 

И JS, который посылает его необходимо работал немного:

var data = new FormData(); 
jQuery.each($('#file')[0].files, function(i, file) { 
    data.append('file-'+i, file); 
}); 


$.ajax({ 
    url: 'balanced/upload.php', 
    data: data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function(data){ 
     alert(data); 
     $('#creditcardpost').append('<input type="hidden" value="' + data + '" name="filename" />'); 
    } 
}); 

Я получил это работает. Спасибо, что помогли парням.

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