2017-01-30 8 views
-1

so an einem Auftrag für die Schule arbeiten. auf Frage stecken, ich habe keine Ahnung, wie man das repariert oder wo man hinschaut (sie bieten auch nicht viel Hilfe).PHP-Fehler, Bilder hochladen

Heres die Frage.

Es gibt einen Fehler auf der Seite "editBanner.php". Wenn Sie ein Bild löschen, wird diese Nummer gelöscht. Wenn eine neue Datei hochgeladen wird, erhält sie die Nummer von einem mehr als die Summe der aktuellen Banner. Es gibt ein Hauptproblem damit, z.B. wenn wir vier Banner haben: 1.jpg, 2.jpg, 3.jpg und 4.jpg. Wenn wir 2.jpg löschen, bleiben wir bei 1.jpg, 3.jpg und 4.jpg. Wenn wir dann ein neues Bild hochgeladen haben, würde die Seite die Anzahl der Bilder (in diesem Fall drei) zählen und 1 hinzufügen, was uns einen neuen Dateinamen von "4.jpg" geben würde. Wir haben bereits eine Datei namens 4.jpg, daher würde das alte 4.jpg ersetzt werden. Finden Sie einen Weg, um diesen Fehler zu beheben, damit die Bilder niemals ersetzt werden.

hier ist der Code. Jede Hilfe wäre fantastisch. und danke im voraus. und wenn Sie einen Fix kennen, wenn Sie den Fix erklären könnten und wie es funktioniert, wäre das großartig.

<?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

Ich will nicht unhöflich sein, aber sind das deine Hausaufgaben? –

+0

ja meine erste in PHP-Studien. es ist ein Albtraum. –

+1

'$ newImage = COUNT ($ files) +1;' - das ist die Zeile, in der Sie Ihren neuen Dateinamen erstellen. Es wurde darauf hingewiesen, dass es in der gegebenen Situation ein großes Problem verursacht. Ändern Sie es in etwas, das zumindest in der Liste der Bildnamen, die Sie haben, einzigartig ist. –

Antwort

0

Wie wäre es mit dem Erstellen der Namen basierend auf Datum und Uhrzeit.

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

Auf diese Weise haben Sie kein Problem mit Ihrem Dateinamen, und es wird auch eindeutige Namen sein.