2012-03-19 44 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>   

我的PHP是

<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 2012-03-19 20:09:50

+2

我認爲這將是你的(和其他人的)利益去除不必要的東西,使這個comprehnsible。例如,「

」與此無關。它所做的只是使問題複雜化。另外,它看起來像你只是向我們展示了兩種形式,'$ _FILES'甚至不在你的代碼中......另外在你的文章體中,你引用了'$ _Files',這是不正確的。 – 2012-03-19 20:10:18

+1

實際處理上載文件的代碼在哪裏? – 2012-03-19 20:11:15

回答

0

沒有通過意大利麪的代碼看,首先檢查你的$ _ POST是否也是空的。

如果是,請確保post_max_size大於upload_max_filesize。這兩個設置必須一致。

+0

我只是做了,但它沒有奏效。如果我查看PHP日誌會有幫助嗎? – 2012-03-19 20:21:46

+0

使用術語「意大利麪代碼」+1 – 2014-02-21 16:26:23

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發送文件就好了。