2012-03-19 3 views
-1

Это первый раз, когда я пытаюсь загрузить файл, и по какой-то причине мой массив $ _FILES пуст. Я проверил снова и снова свой HTML, и мне все хорошо. Когда я пытаюсь отлаживать приведенный ниже код в eclipse, массив $ _Files пуст, когда я его проверю. Я проверил php_ini файл, он имеет:

  • file_uploads = О
  • upload_max_filesize = 2M

Форма находится в окне FancyBox модальной. Мой HTML выглядит следующим образом:

<form action="/CiREM/attachments/addAttachmentsModal.php?requestId=120" enctype="multipart/form-data" method="post" id="addattachment" name="addattachment" class="form-vertical" autocomplete="off"> 
     <input type='hidden' id='requestId' name='requestId' value="120"/> 
     <input type='hidden' id='listScreen' name='listScreen' value=""?> 
     <input type='hidden' name='MAX_FILE_SIZE' value='4000000' /><br/> <strong>Max File size Allowed: </strong>4 Mb <br/><strong>File Formats Allowed: </strong>gif,jpeg,jpg,png<br/><hr/>    <div class="control-group"> 


       <div class="controls input"> 
        <input class="input-file" type="file" name="upload_file[]" id="upload_file[]"/><br/> 
       </div> 
       </div> 
        <input class="input-file" type="file" name="upload_file[]" id="upload_file[]"/><br/> 
       </div> 
       </div> 
        </div> 
        <div class ="clear"></div> 
         <input id="addAttachmentsBtn" type="submit" class="btn btn-primary btn-large" value="Add Attachments"/> 
        </form>   

Мой РНР

<form action="<?php echo $_SERVER['PHP_SELF']."?requestId=".$requestId?>" enctype="multipart/form-data" method="post" id="addattachment" name="addattachment" class="form-vertical" autocomplete="off"> 
     <input type='hidden' id='requestId' name='requestId' value="<?php echo $requestId;?>"/> 
     <input type='hidden' id='listScreen' name='listScreen' value="<?php echo $listScreen;?>"?> 
     <?php 
     if ($CIREM['MAX_IMG_NUM']>0){ 
      echo "<input type='hidden' name='MAX_FILE_SIZE' value='".$CIREM['MAX_IMG_SIZE']."' />"; 
      echo "<br/> <strong>Max File size Allowed: </strong>".($CIREM['MAX_IMG_SIZE']/1000000)." Mb <br/><strong>File Formats Allowed: </strong>".$CIREM['IMG_TYPES']."<br/><hr/>";?> 

     <?php for ($i=1;$i<=$CIREM['MAX_IMG_NUM'];$i++){?> 


       <div class="controls input"> 
        <input class="input-file" type="file" name="upload_file[]" id="upload_file[]"/><br/> 
       </div> 

      <?php }?> 

     <?php } 
     else{ 
      echo "<p class='alert alert-info'>Attachment uploading is not allowed</p>"; 
     } 
     ?> 

Любая помощь будет принята с благодарностью.

Спасибо, Шакира

+3

Ваш PHP просто выводит то, что похоже на аналогичную форму вашего HTML. Где код, который действительно имеет проблему? – Cfreak

+2

Я думаю, что вам (и всем остальным) удастся удалить ненужные вещи, чтобы сделать это возможным. Например, '

' не имеет к этому никакого отношения. Все, что он делает, усложняет вопрос. Кроме того, похоже, что вы просто показываете нам 2 формы, слово '$ _FILES' даже не в вашем коде ... Также в вашем теле сообщения вы ссылаетесь на' $ _Files', что неверно. –

+1

Где код, который фактически обрабатывает загружаемые файлы? –

ответ

0

Не глядя через этот запутанный код, сначала проверьте, является ли пустым вашим $ _POST.

Если это так, убедитесь, что post_max_size больше, чем upload_max_filesize. Эти два параметра должны быть конгруэнтными.

+0

Я просто сделал это, но он не работал. Будет ли это помогать, если я посмотрю журналы php? –

+0

+1 для использования термина «код спагетти» –

0

Прежде всего жаль позднего ответа, но так как иногда люди натыкаются на старые темы в stackoverflow, я решил написать, как это работает для меня.

Итак, чтобы отправлять файлы через ajax, вы должны использовать FormData.

Я вставлю ссылку на проект github. Мне нужно отправить формы через ajax, чтобы вы могли проверить рабочий пример и вставить здесь фрагмент.

Ссылка: https://github.com/pihh/auto-ajax-form

Код:

$("form").on('submit',function(event) { 
     if($(this).attr('ajax')){ 
      event.preventDefault(); 
      var marianaFormUrl = $(this).attr('action'); 
      var marianaFormId = $(this).attr('id'); 
      var marianaFormMethod = $(this).attr('type'); 
      var marianaFormSucess = $(this).attr('success'); 
      var marianaFormComplete = $(this).attr('complete'); 
      var marianaFormBefore = $(this).attr('before'); 
      var marianaFormInputs = $('#' + marianaFormId +' :input'); 
      var marianaEncType = $(this).attr('enctype'); 
      var marianaFormData = {}; 

      // Set enctype 
      if(marianaEncType === undefined || marianaEncType == ''){ 
       $(this).attr('enctype','multipart/form-data'); 
      } 

      // Run Ajax Call 
      $.ajax({ 
       url: marianaFormUrl, 
       type: marianaFormMethod, 
       dataType: 'JSON', 
       data: new FormData(this), 
       processData: false, 
       contentType: false, 
       cache: false, 
       success:function(data){ 
        // Run success 
        if(marianaFormSucess !== undefined && marianaFormSucess !== ''){ 
         var fn = marianaFormSucess; 
         var func = fn +'(data)'; 
         eval(func); 
        } 
       }, 
       complete:function(data){ 
        // Run complete 
        if(marianaFormComplete !== undefined && marianaFormComplete !== ''){ 
         var fn = marianaFormComplete; 
         var func = fn +'(data)'; 
         eval(func); 
        } 
       } 
      }); 
     } 
    }); 

Это он, используя FormData отправляет файлы просто отлично.

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