横幅图像删除时不重复编号



我正在做一个带有不断变化的图像的横幅。

当我从我的图像文件夹中删除文件时。删除映像时,该数字将被删除。上传新文件时,其数量比当前横幅总数多一个。这有一个主要问题,例如,如果我们有四个横幅:1.jpg、2.jpg、3.jpg 和 4.jpg。如果我们删除 2.jpg,我们只剩下 1.jpg、3.jpg 和 4.jpg。如果我们随后上传了一张新图片,该页面将计算图片数量(在本例中为 3 张)并添加 1,给我们一个新的文件名"4.jpg"。我们已经有一个名为 4.jpg 的文件,因此,旧的 4.jpg 将被替换。

如何阻止这种情况发生?这是横幅的代码。

      <?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");
        $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>";
            move_uploaded_file($_FILES["file"]["tmp_name"], $dir . "/" . $newImage . "." . $extension);
            echo "Stored in: " . $dir . "/" . $_FILES["file"]["name"];
            header("Location: editBanner.php?add=1");
          }
        } 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>

我认为您必须将最后一个数字保存在文本文件或数据库中。它无法正确计算文件 - 删除某些文件后,您将始终获得"使用"的数字。上传文件后,从文本文件或数据库获取当前数字并增加。或者:对该文件夹中的所有文件进行排序,将所有文件名放在一个数组中,对数组进行排序,获得最高的数字并增加。

最新更新