繁体   English   中英

PHP中的多文件上载验证无法正常工作

[英]Multiple file upload validation in PHP not working

我试图验证我上传的所有文件,实际上我做文件大小和文件类型验证。 如果任何文件的验证失败,我会记录该特定文件的错误消息。我正在使用每个循环进行文件处理,如果条件用于文件大小和文件类型验证,但问题仅在第一个条件被评估时,第二个如果是块没有经过测试。 两个if都位于每个循环内部。 任何帮助将不胜感激...

 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数组中可用。 请有人为此解决问题......

RE-EDIT

Id'myfiles'用于保存输入文件字段中的多个文件。 Id'dataS'是由下面给出的JS创建的表的div。 IF'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>

你在寻找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;
    }
}

仅检查大小是否违反扩展名。

(这不是一个很好的例子,我做了这个,还有其他的,但如果你不知道其他的话,我认为首先看到别的更重要)

正如你所说的我们的第一个如果条件工作正常但不适合休息所以我的问题在for循环。所以只是检查这件事我会帮助

public function 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]

它可能会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM