2017-06-15 93 views
1

我想驗證所有我上傳的文件,實際上我做文件大小和文件類型驗證。如果驗證失敗的任何文件,我記錄該錯誤消息的特定文件。我正在使用每個循環進行文件處理,如果文件大小和文件類型驗證的條件,但問題是隻有第一條件評估和第二如果塊未經測試。兩個如果在每個循環內。任何幫助將不勝感激...在PHP中的多個文件上傳驗證不工作

代碼

public function validate_my_files(){ 

    foreach($this->files_from_user_validateit['name'] as $key => $value){ 
     $name = $this->files_from_user_validateit['name'][$key]; 
     $size = $this->files_from_user_validateit['size'][$key]; 
     $type = $this->files_from_user_validateit['type'][$key]; 
     //$error[$key] = $this->files_from_user_validateit['error'][$key]; 
     //$tmp_name[$key] = $this->files_from_user_validateit['tmp_name'][$key]; 

     //not allowed file extensions 
     $not_allowed_ext = array('php','js','asp','aspx','py','c','c++','jsp','perl','cfg','css','java', 
            'json'); 
     //lets find the extension of the filename 
     $est = explode('.',$name); 
     $ext = $est[count($est)-1]; 
     if(in_array($ext,$not_allowed_ext)){ 
      //putting in session for later message 
      $_SESSION['ext'][] = $name; 
     } 

     //lets check for file size now, lets not allow file greater than 50MB 
     if($size > 47185920){ 
      $_SESSION['size'][] = $name; 
     } 
    } 
    print_r($_SESSION);die(); 
    } 

只有文件擴展名,如果被測試,而如果條件大小不工作?

編輯

不幸的是巨大的我的上傳表單存在問題。稍後選擇的文件只能由$ _FILES處理,我正在使用多個文件上傳並使用Java腳本在同一頁的表中顯示選定的文件。比方說,我首先選擇5個文件(表格中顯示的5個文件),然後再次選擇3個文件,現在總共有8個文件放在表格上。但是隻有第三次選擇的最後3個文件在$ _FILES數組中可用。請任何人有這種解決方案

重新編輯

ID「myfiles的」是從輸入文件中的字段保存多個文件。 Id'dataS'是由下面給定的JS創建的表格。 如果'tot'是表中文件總大小的跨度。 輸入表格:

<form id="uploadform" method="post" action="" enctype="multipart/form-data"> 
     <div id="datas"></div> 

     <div id="tot"><h3>TOTAL SIZE:</h3> <span id="zise">0 MB</span></div> 

     <div id="addfiles"><input type="file" name="addfiles[]" value="Add Files" multiple="multiple" id="myfiles" ></div> 

     <input type="submit" name="sbmtfile" style="color:green;font-size: 17px;"> 

    </form> 

我的JS:

<script type="text/javascript"> 
    var s = 1; 
    var totsize = 0; 

    myfiles.onchange = function(){ 
     var a = document.getElementById('myfiles').files; 
     var b = document.getElementById('datas'); 
     var total = document.getElementById('tot');//for table title 

    var c = document.createElement('TABLE'); 
    c.className = 'showtable'; 
    c.border = '1px'; 
    c.cellspacing = '0'; 
    c.cellpadding = '2'; 
    c.width = '100%' 

    for(var i = 0; i < a.length; i++){ 
     var f = document.createElement('TR'); 
     c.appendChild(f); 
     //for total file size 
     totsize = totsize + a[i].size; 

     var r = document.createElement('TD'); 
     r.align = 'center'; 
     r.width = '152px'; 
     f.appendChild(r); 
     r.appendChild(document.createTextNode(s++)); 

     var y = document.createElement('TD'); 
     y.align = 'left'; 
     y.width = '610px'; 
     y.appendChild(document.createTextNode(a[i].name)); 
     f.appendChild(y); 

     var z = document.createElement('TD'); 
     z.align = 'center'; 
     r.width = '152px'; 
     z.appendChild(document.createTextNode(Math.round((a[i].size)/1024))); 
     f.appendChild(z); 

     var x = document.createElement('TD'); 
     x.align = 'center'; 
     x.width = '152px'; 
     x.appendChild(document.createTextNode('DELETE')); 
     f.appendChild(x); 
    } 

    b.appendChild(c); 
    document.getElementById('zise').innerHTML = Math.round((totsize/(1024*1024)))+ ' MB'; 
} 

</script> 
+0

是'files_from_user_validateit()'自定義函數?由於您正在檢查'if($ size> 47185920)',它基本上是'if($ this-> files_from_user_validateit ['size'] [$ key];> 47185920)',您需要檢查它返回的值。 – Sean

+0

@Sean($ this-> files_from_user_validateit)包含所有我上傳的文件,即我從表單獲得的文件,即它是一個文件數組,它工作正常,我可以在這裏獲取我上傳的所有文件... – mindre

回答

0

您正在尋找的else語言元素?

if (in_array($ext,$not_allowed_ext)) { 
      //putting in session for later message 
      $_SESSION['ext'][] = $name; 
} else { 
    #### 
    //lets check for file size now, lets not allow file greater than 50MB 
    if ($size > 47185920) { 
     $_SESSION['size'][] = $name; 
    } 
} 

只檢查大小,如果不是擴展違規。

(不是一個美麗的例子我做了這個,而且還有否則如果,但如果你不知道的是,我認爲看到別人先它更重要的)

+0

Bro ,我需要檢查兩種類型以及尺寸... – mindre

0

至於你說我們的第一如果條件是工作的罰款,但不工作的休息,所以我的東西在loop.So只檢查這個我一點問題也將有助於

公共職能validate_my_files(){

foreach($this->files_from_user_validateit as $key => $value){ 
    $name = $value['name'][$key]; 
    $size = $value['size'][$key]; 
    $type = $value['type'][$key]; 
    //$error[$key] = $this->files_from_user_validateit['error'][$key]; 
    //$tmp_name[$key] = $this->files_from_user_validateit['tmp_name'][$key]; 

    //not allowed file extensions 
    $not_allowed_ext = array('php','js','asp','aspx','py','c','c++','jsp','perl','cfg','css','java', 
           'json'); 
    //lets find the extension of the filename 
    $est = explode('.',$name); 
    $ext = $est[count($est)-1]; 
    if(in_array($ext,$not_allowed_ext)){ 
     //putting in session for later message 
     $_SESSION['ext'][] = $name; 
    } 

    //lets check for file size now, lets not allow file greater than 50MB 
    if($size > 47185920){ 
     $_SESSION['size'][] = $name; 
    } 
} 
print_r($_SESSION);die(); 

} 只要改變

$this->files_from_user_validateit['name'] 

隨着

$this->files_from_user_validateit 

而且

$this->files_from_user_validateit['name'][$key] 

$value['name'][$key] 

它可以幫助你。

+0

欣賞兄弟,但不幸的是,我的表單存在很大的問題(如編輯部分所述)。如果你有任何解決方案,那麼請建議... – mindre

+0

我有你在java腳本問題,所以你可以顯示你的腳本在這裏上傳文件。 –

+0

請看看我剛剛添加的js和輸入字段... – mindre