2017-08-09 93 views
0

在我的代码中,您可以选择是否上传文件,如果您不需要,只需结束代码,但如果您上传文件并选择适当的包名称(这是他们创建的数据库名称),则假设运行代码并提交到文件目录。但我的问题是,在这行代码PHP检查多个文件上传是否为空

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> 
+0

你通过'$ _FILES [ '打包文件']需要循环foreach循环之前的文件'所以之前该行'如果($ _ FILES ['打包文件''['error'] == UPLOAD_ERR_OK){'你需要做一些像foreach($ _ FILES ['packFiles']为$ fileUpload){' – cmorrissey

+0

等待,但如果用户没有提交任何数据?我会得到一个错误导致文件不存在? – Jagr

回答

1
// check and see whether is empty 
     if(!empty($_FILES['packFiles']['name'])){ 

     foreach($_FILES['packFiles']['tmp_name'] as $key => $error){ 
       $filename = file_get_contents($_FILES['packFiles']['tmp_name'][$key]; 
       // check file_get_contents 
       if($pack_tmp = file_get_contents($filename) !== false){     

         $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)){ 



         }else{ 

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


         } 
     } 
     }else{ 

    //error any error message u want. 
    } 

检查

+0

谢谢,但是当它是“空的”,我得到这个错误“(!)警告:file_get_contents():文件名不能为空在C:\ wamp64 \ www \ MT \ developer_packupdater.php上线110 ” – Jagr

+0

因为我有其他输入,我检查如果不是空的,我运行的代码,我得到那个错误。我没有显示其他代码导致它太长,我想专注于文件 – Jagr

+0

我添加了这个来控制错误if($ pack_tmp = file_get_contents($ filename)!== false) –