2017-08-09 1 views
0

私のコードでは、ファイルをアップロードするかどうかを選択できますが、コードを終了するだけでファイルをアップロードして適切なパックname(作成したデータベース名)で、コードを実行してファイルディレクトリに送信すると仮定します。しかし、私の問題は、ファイルが「エラーなし」空かないと、それは内部のコードを実行する場合、このコード行で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

をチェック'' ['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. 
    } 

このライン `もし($ _ FILES [ 'packFiles前に`ので、あなたは `$ _FILES [ 'packFiles']をループする必要があるforeachループの前にファイル

+0

ありがとうございますが、 "空"の場合はこのエラーが発生します。 "(!)警告:file_get_contents():ファイル名はC:\ wamp64 \ www \ MT \ developer_packupdater.phpで空にはできません。 " – Jagr

+0

空でないかどうかをチェックしてコードを実行し、そのエラーが出る他の入力。私は他のコードが長すぎる原因を示していないと私はファイルに焦点を当てたいと思った – Jagr

+0

($ pack_tmp = file_get_contents($ filename)!== false) –

関連する問題