2017-01-30 2 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); 

Таким образом, у вас не будет проблем с вашим именем файла, и это будут уникальные имена.

Смежные вопросы