2017-01-30 60 views
-1

因此在为学校做作业。停留在问题上,我不知道如何解决这个问题或在哪里寻找(他们也没有提供太多的帮助)。PHP BUG,上传图片

继承人的问题。

“editBanner.php”页面存在一个错误。删除图像时,该号码将被删除。上传新文件时,会给出比当前横幅总数多一个的编号。这是一个主要的问题,例如如果我们有四个横幅:1.jpg,2.jpg,3.jpg和4.jpg。如果删除2.jpg,我们会留下1.jpg,3.jpg和4.jpg。如果我们上传了一张新图片,页面会计算图片的数量(在这种情况下为三张)并添加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"); 
      $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>'; 
      $files[$i--]; 
       } 
      ?> 

     <style> 
     #bannerAdd { 
      float: right; 
      margin-right: 700px; 
     } 
     </style> 

     <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

是我的第一个PHP研究。这是一场噩梦。 –

+1

'$ newImage = COUNT($ files)+1;' - 这是您构建新文件名的行。有人指出,在特定情况下它会造成重大问题。至少在您拥有的图像名称列表中将其更改为唯一的。 –

回答

0

如何根据日期和时间创建名称。

$temp = explode(".", $_FILES["file"]["name"]); 
$newImage = round(microtime(true)) . '.' . end($temp); 

这样你就不会有你的文件名的问题,它也将是唯一的名称。