繁体   English   中英

PHP如何将用户限制为可以上传的特定数量的文件

[英]PHP How to limit users to a specific number of files that can be uploaded

我一直在寻找将用户限制为“ 5”个文件上传的方法,如果他们上传更多文件,则回显一条消息。 我想限制5个,因为为了防止垃圾邮件发送者和想要欺骗系统并将5个以上的文件上传到他的数据库中的用户。 我找到了这个答案

if(isset($_FILES['file']['name'][5])){
  // Code

}else{

  //exit
}

但是,它对我不起作用。 它仍然发送到数据库,如果文件大于5,则跳过检查程序。 这是我的代码

的PHP

 if($_SERVER['REQUEST_METHOD'] =="POST"){


         if(!empty($_POST['price']) && !empty($_POST['description'])){

             if(!ctype_digit($_POST['price'])){

            echo "PRICE ENTERED IS NOT AN INTEGER... PLEASE TRY AGAIN!";
            exit;
        }
            $price = addslashes(trim((int)$_POST['price']));
            $description = addslashes(trim($_POST['description']));
            if(strlen($description) < 15){

                echo "Description field needs to be GREATER than 15 characters!";
                exit;
            }

             if(isset($_FILES['file']['name'][5])){


                 try{

                    // new php data object 
                    $handler = new PDO('mysql:host=127.0.0.1;dbname=magicsever', 'root', '');
                    //ATTR_ERRMODE set to exception
                    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                }catch(PDOException $e){
                     die("There was an error connecting to the database");   

                }

                 $query = "INSERT INTO test(name, file)VALUES(:file_name, :file_tmp)";
                 $stmt = $handler->prepare($query);
                 $errors = array();

                 foreach($_FILES['file']['tmp_name'] as $key => $error){

                     if ($error != UPLOAD_ERR_OK) {
                        $errors[] = $_FILES['file']['name'][$key] . ' was not uploaded.';
                        continue;
                    }

                     $file_name = $key.$_FILES['file']['name'][$key];
                     $file_tmp = $_FILES['file']['tmp_name'][$key];

                     try{

                         $stmt->bindParam(':file_name', $file_name, PDO::PARAM_STR);
                         $stmt->bindParam(':file_tmp', $file_tmp, PDO::PARAM_STR);
                         $stmt->execute();

                         $dir = "devFiles";

                         if(is_dir($dir)==false){

                             mkdir($dir, 0700);
                         }

                         if(is_file($dir.'/'.$file_name)==false){

                             move_uploaded_file($file_tmp,$dir.'/'.$file_name);

                         }else{

                            echo '<br><h1 style="color:red;">VALUES MISSING!</h1>';
                            exit;
                         }
                     }catch(PDOException $e){

                         $errors[] = $file_name . 'not saved in db.';
                         echo $e->getMessage();
                     }
                 }

                 echo "pk";
             }else{

                echo "tooo big";
                 exit;
             }

             }else{

             echo '<br><h1 style="color:red;">VALUES MISSING!</h1>';
             exit;

     }



         }

如果执行的代码超过5个,则您正在执行代码。要检查的代码不超过5个,请使用!

if(!isset($_FILES['file']['name'][5])){

但是您可能只想数:

if(count($_FILES['file']['name']) < 6){

您的条件当前正在检查是否存在第6个文件,然后继续。 代替:

if (count($_FILES['file']['name']) <= 5) {
    ...

暂无
暂无

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

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