2017-02-16 4 views
1

私はプロジェクトの問題を抱えていて、できる限り試してみました(私は考えることができます)。PHPの画像ファイルのアップロード番号の問題

今、「editBanner.php」ページにバグがあります。イメージを削除すると、その番号が削除されます。新しいファイルがアップロードされると、現在のバナーの合計よりも1つ多くの番号が与えられます。これには大きな問題があります。 1.jpg、2.jpg、3.jpg、4.jpgの4つのバナーがあるとします。 2.jpgを削除すると、1.jpg、3.jpg、4.jpgが残っています。新しい画像をアップロードした場合、そのページは画像の数をカウントし(この場合は3)、1を加えて新しいファイル名「4.jpg」を与えます。すでに4.jpgというファイルがありますので、古い4.jpgが置き換えられます。

私は、これを解決するためにマイクロタイム機能を使用しなければならないと言われましたが、私はこの機能に晒されていないので、実際にどのように使用するのか分かりません。あなたが私のコードを見て、私に例を挙げることができれば、それはすばらしいでしょう。

<?php 
    require_once ("Includes/simplecms-config.php"); 
    require_once ("Includes/connectDB.php"); 
    include("Includes/header.php");   

    confirm_is_admin(); 

    $dir = 'Images/banner'; 
    $confirmation = ""; 

    if(isset($_GET["del"])){ 
     if (file_exists($dir . "/" . $_GET["del"])) { 
      unlink($dir . "/" . $_GET["del"]); 
      $confirmation = $_GET["del"] . " deleted. <br><br>"; 
     } else { 
      $confirmation = $_GET["del"] . " doesn't exist. <br> 
    <br>"; 
     } 
    } 

    $files = scandir($dir); 
    array_shift($files); 
    array_shift($files); 

    $newImage = COUNT($files)+1; 

    if(isset($_GET["add"])) { 
     $confirmation = "Image successfully uploaded."; 
    } 

    if(isset($_FILES["file"]["name"])){ 
     $allowedExts = array("gif", "jpeg", "jpg", "png"); 
     sort($allowedExts); 
     $temp = explode(".", $_FILES["file"]["name"]); 
     $extension = end($temp); 

     if ((($_FILES["file"]["type"] == "image/gif") 
     || ($_FILES["file"]["type"] == "image/jpeg") 
     || ($_FILES["file"]["type"] == "image/jpg") 
     || ($_FILES["file"]["type"] == "image/pjpeg") 
     || ($_FILES["file"]["type"] == "image/x-png") 
     || ($_FILES["file"]["type"] == "image/png")) 
     && ($_FILES["file"]["size"] < 50 * 1024 * 1024) //50mb (1024 
     * 1kb = 1mb, 50 x 1024kb = 50mb) 
     && in_array($extension, $allowedExts)) { 
      if ($_FILES["file"]["error"] > 0) { 
      echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
      } else { 
      echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
      echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
      echo "Size: " . ($_FILES["file"]["size"]/1024) . " 
     kB<br>"; 
      echo "Temp file: " . $_FILES["file"]["tmp_name"] . " 
    <br>"; 
      echo round(microtime(true)) . $_FILES["file"] 
     ["tmp_name"]; 

      move_uploaded_file($_FILES["file"]["tmp_name"], $dir . 
     "/" . $newImage . "." . $extension); 
      echo "Stored in: " . $dir . "/" . $_FILES["file"] 
     ["name"]; 
      header("Location: editBanner.php?add=1"); 


      if(file_exists($_FILES["file"]["tmp_name"]["name"] 
     ["type"]["size"]) && is_file($_FILES["file"]["tmp_name"] 
     ["name"]["type"]["size"])) { 

      unlink($_FILES["file"]["tmp_name"]["name"]["type"] 
     ["size"]); 

      } 




      } 
     } else { 
      echo "Invalid file"; 
      } 
     } 
    ?> 


    <div id="container"> 
    <div id="admin"> 
     <?php 
      if(!empty($confirmation)) { 
       echo "<div id='confirmation'>" . $confirmation . " 
     </div>"; 
      } 

      for ($i = 0; $i < COUNT($files); $i++) { 

       echo '<div id="bannerImage">'; 
       echo $files[$i] . ' - <a href="editBanner.php?del=' . 
    $files[$i] . '">Delete</a><br>'; 
       echo '<img src="' . $dir . '/' . $files[$i] . '" 
     width="200px" height="100px" /><br>'; 
       echo '</div>'; 
      } 
     ?> 
     <div id="bannerAdd"> 
      <form action="editBanner.php" method="post" 
      enctype="multipart/form-data"> 
       <h3>Upload a New Banner Image</h3> 
       <input type="file" name="file" id="file"><br> 
       <input type="submit" name="submit" value="Submit"> 
       </form> 
      </div> 
     </div> 
    </div> 

    </div> <!-- End of outer-wrapper which opens in header.php --> 

    <?php 
     include ("Includes/footer.php"); 
    ?> 
+0

プライマリキーの次の値を使用できます –

答えて

0

画像を保存するには、次のオプションを使用できます。

現在時刻 - は、現在の時刻で画像をUNIX形式で保存するPHPで使用できます。必要に応じて名前を連結することができます。例:

$newImageName = 'banner_'.time(); // output: banner_1487223503

画像を削除するためには、私はあなたがディレクトリをスキャンし、$filesで画像を取得している参照してください。だから、同じものを適用することができます。

このように、すべての画像の名前は一意になります。お役に立てれば!

関連する問題