PHP检查多个文件上传是否为空

标签 php file

在我的代码中,你可以选择是否上传文件,如果你不上传,它应该只是结束代码,但如果你上传文件并选择适当的包名称(这是他们的数据库名称创建)然后假设运行代码并提交到文件目录。但是我的问题是在这行代码中

if($_FILES['packFiles']['error'] == UPLOAD_ERR_OK){

它检查文件是否不为空或“无错误”,并运行内部代码,但因为我有这样的“多个文件上传”

<input type="file" name="packFiles[]" multiple>

它跳过它并结束代码。我注意到当我删除多个部分时它工作得很好。所以我的问题是,是否有一种方法可以在允许用户上传多个文件的同时检查它是否不为空。这是我的代码。

PHP

   <?php
session_start();

 if(empty($_FILES) && empty($_POST) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post'){ //catch file overload error...
        $postMax = ini_get('post_max_size'); //grab the size limits...
        echo "<p style=\"color: #F00;\">\nPlease note files larger than {$postMax} will result in this error!</p>"; // echo out error and solutions...
        return $postMax;
    }

if(isset($_COOKIE['id'])){

    if($_SESSION['came_from_upload'] != true){

        setcookie("id", "", time() - 60*60);
        $_COOKIE['id'] = "";
        header("Location: developerLogin.php");
        exit;


    }
    echo "<h1> UPDATE PACK FILES INFORMATION</h1>";
    try{

        // new php data object 
        $handler = new PDO('mysql:host=127.0.0.1;dbname=magicserver', '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");   

        }
       $userid = $_SESSION['id'];
       $stmt = $handler->prepare("SELECT * FROM pack_profile WHERE pack_developer_id = :userid");
       $stmt->bindParam(':userid', $userid, PDO::PARAM_INT);
       $stmt->execute();
        echo "<h2> Please select the pack name you want to update!</h2>";


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

       if(!empty($_POST['packNameSelection'])){
            $price = addslashes(trim((int)$_POST['price']));
            $description = addslashes(trim($_POST['description']));
            $packname = addslashes(trim($_POST['pack_name']));

           $packNameSelection = $_POST['packNameSelection'];
           if(!empty($packname)){

               $stmtPacknameCheck = $handler->prepare("SELECT * FROM pack_profile WHERE pack_name = :packname");
               $stmtPacknameCheck->bindParam(':packname', $packname, PDO::PARAM_STR);
               $stmtPacknameCheck->execute();
               if($stmtPacknameCheck->fetch()){

                   echo "Packname entered is already in use... Please try again";
                   exit;
               }

               $stmtPackname = $handler->prepare("UPDATE pack_profile SET pack_name = :packname WHERE pack_name = :packNameSelection");
               $stmtPackname->bindParam(':packname', $packname, PDO::PARAM_STR);
               $stmtPackname->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
               $stmtPackname->execute();
           }

           if(!empty($price)){

               if(!ctype_digit($price)){

                    echo "PRICE ENTERED IS NOT AN INTEGER... PLEASE TRY AGAIN!";
                    exit;
                }

                $stmtPrice = $handler->prepare("UPDATE pack_profile SET pack_price = :price WHERE pack_name = :packNameSelection");
                $stmtPrice->bindParam(':price', $price, PDO::PARAM_INT);
                $stmtPrice->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
                $stmtPrice->execute();
           }

           if(!empty($description)){

               if(strlen($description) < 10){

                echo "Description field MUST to be GREATER than 10 characters!";
                exit;
            }

               $stmtDescription = $handler->prepare("UPDATE pack_profile SET pack_description = :description WHERE pack_name = :packNameSelection");
               $stmtDescription->bindParam(':description', $description, PDO::PARAM_STR);
               $stmtDescription->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
               $stmtDescription->execute();

           }

           if(!empty($_FILES['packFiles']['tmp_name'])){

               $stmtPackCheck = $handler->prepare("SELECT * FROM pack_profile WHERE pack_name = :packNameSelection");
               $stmtPackCheck->bindParam(':packNameSelection', $packNameSelection, PDO::PARAM_STR);
               $stmtPackCheck->execute();
               $resultPack = $stmtPackCheck->fetch();

               $file_name = "";
               $packid = $resultPack['pack_id'];
                foreach($_FILES['packFiles']['tmp_name'] as $key => $error){

                     if ($error != UPLOAD_ERR_OK) {
                        $errors[] = $_FILES['packFiles']['name'][$key] . ' was not uploaded.';
                        continue;
                    }
                    $pack_tmp = file_get_contents($_FILES['packFiles']['tmp_name'][$key]);
                $pack_filename = preg_replace("/[^a-z0-9\.]/", "_", strtolower($_FILES['packFiles']['name'][$key]));
                     $pack_filename = strtotime("now")."_".$pack_filename;
                    $file_name .= $_FILES['packFiles']['name'][$key].",";
                    //Insert into file directory
                    $dir = "devPacks/" .$userid."/".$packid;
                    if(is_dir($dir)==false){

                        mkdir($dir, 0777, true);
                    }
                    if(!move_uploaded_file($_FILES['packFiles']['tmp_name'][$key],$dir.'/'.$pack_filename)){

                            die("an error occurred sending this file... Pleas try again later!");

                }


                }
           }

           die("ok");
       }else{

           echo "Please select valid value from dropdown list";
           exit;
       }
}
}


?>

<form method="post" enctype="multipart/form-data" autocomplete="off">

    <select name="packNameSelection">
        <option value="" disabled selected>Select Your Pack Name</option>
    <?php

        while($result = $stmt->fetch()){
     echo "<option value=\"" . $result['pack_name'] . "\">" . $result['pack_name'] ."</option>";
   }


    ?>
    </select>

    <br>
    Pack Name: <input type="text" name="pack_name" placeholder="Your pack name">
    <input type="hidden" name="post_id">
    <br></br>
    Price: <input type="text" name="price" placeholder="If FREE enter 0">
    <br></br>

    Descripion: <textarea rows="4" cols="50" name="description" placeholder="Description..."></textarea>
    <br></br>
    Select Pack Files: <input type="file" name="packFiles[]" multiple>
    <br></br>
    <!--Select Pack Screenshots/Video: <input type="file" name="file[]" multiple> -->
<br></br>
    <input type="submit" name="submit">

</form>

最佳答案

我们可以将其用于多文件输入:

if(!empty($_FILES['packFiles']['name'][0])){ 
    // do something
}

关于PHP检查多个文件上传是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596770/

相关文章:

php - 使用 var_dump 时 string() “value"是什么意思

php - Laravel 4,如何访问反向一对多关系?

php - 从 MySQL 结果和 PHP 为 D3.js 树创建分层 JSON?

php - 将具有相同值的数组元素放入一个元素中并连接它们的键

java - 从android中的文本文件读取

php - 通过 Composer 安装适用于 PHP 的 Microsoft Azure 存储库时出现问题

file - 批处理文件日期时间

c - fread 在c中用随机字符填充字符串

java - 产生 = "application/pdf"不适用于 Spring Boot

c++ - ifstream 打不开