erawan: Codevereinfachung - aber wie?

Schönen Vormittag miteinander!

Bei meinem aktuellen Projekt hab ich ein Formular bei dem ich mehrere Bilder und deren Vorschaubilder uploaden kann. Das funktioniert soweit auch ganz gut nur beim Speichern habe ich eine riesige Latte an Code (für jedes große Bild die Maße überprüfen, evtl vorhandenes altes Bild löschen und neues uploaden + altes Vorschaubild löschen und neues uploaden)

Ich bin mir sicher dass man das sicher eleganter (und vor allem kürzer) lösen könnte anstatt 9 mal den nachfolgenden Code hinschreiben zu müssen (nur mit der Änderung der Ziffer bei den Variablen userimgX, bildX & bildXv)!?

Bitte um eure Hilfe! Danke.

Lg erawan

  
 $projekte_bild1 = strip_tags($_POST["projekte_bild1"]);  
 $projekte_bild1v = strip_tags($_POST["projekte_bild1v"]);  
  
 $destdir = "../media/projekte/".date("ymdhis_");  
  
 // Upload der Bilddateien 1  
 if (isset($_FILES["userimg1"]) && !empty($_FILES["userimg1"]['name'])) {  
   $size = getimagesize($_FILES["userimg1"]['tmp_name']);  
   $width  = $size[0];  
   $height = $size[1];  
   if ($width > 480 || $height > 300){  
      print("<p class='errmsg'><b>Das angegebene Originalbild 1 ist zu gro&szlig; (Breite: $width, H&ouml;he: $height)! Bitte w&auml;hlen Sie ein kleineres!</b><br/><br/><a href='javascript:history.back()'>zur&uuml;ck zum Formular</a></p>");  
      break;  
   }  
  
   if(!strstr($projekte_bild1,"leer.gif") && file_exists("../media/projekte/".$projekte_bild1)){  
     if(@unlink("../media/projekte/".$projekte_bild1)){  
    echo "<p class='okmsg'>Altes Originalbild ($projekte_bild1) wurde erfolgreich gel&ouml;scht</p>";  
      }else{  
    echo "<p class='errmsg'>Altes Originalbild ($projekte_bild1) konnte NICHT gel&ouml;scht werden</p>";  
     }  
   }  
   if(move_uploaded_file($_FILES['userimg1']['tmp_name'],$destdir.$_FILES['userimg1']['name'])){  
  $projekte_bild1 = date("ymd_").$_FILES['userimg1']['name'];  
  echo "<p class='okmsg'><b>Upload des Originalbilds 1 ($projekte_bild1) erfolgreich</b></p>";  
 }else{  
  echo "<p class='errmsg'><b>Fehler beim Upload des Originalbilds 1</b></p>";  
  $projekte_bild1 = "leer.gif";  
   }  
 }  
 if (isset($_FILES["userimg1v"]) && !empty($_FILES["userimg1v"]['name'])) {  
   if(!strstr($projekte_bild1v,"leer.gif") && file_exists("../media/projekte/".$projekte_bild1v)){  
     if(@unlink("../media/projekte/".$projekte_bild1v)){  
    echo "<p class='okmsg'>Altes Vorschaubild ($projekte_bild1v) wurde erfolgreich gel&ouml;scht</p>";  
      }else{  
    echo "<p class='errmsg'>Altes Vorschaubild ($projekte_bild1v) konnte NICHT gel&ouml;scht werden</p>";  
     }  
   }  
   if(move_uploaded_file($_FILES['userimg1v']['tmp_name'],$destdir.$_FILES['userimg1v']['name'])){  
  $projekte_bild1v = date("ymd_").$_FILES['userimg1v']['name'];  
  echo "<p class='okmsg'><b>Upload des Vorschaubilds 1 ($projekte_bild1v) erfolgreich</b></p>";  
 }else{  
  echo "<p class='errmsg'><b>Fehler beim Upload des Vorschaubilds 1</b></p>";  
  $projekte_bild1v = "leer.gif";  
   }  
 }  
  

  1. Hallo,

    Du kannst alle hochgeladenen Dateien mit dem $_FILES-Array durchlaufen:

    foreach($_FILES as $file)
    {...}

    Grüße Basti

    1. Du kannst alle hochgeladenen Dateien mit dem $_FILES-Array durchlaufen:

      foreach($_FILES as $file)
      {...}

      Hallo Basti

      Danke für den Tipp nur wie kann ich dann in der Schleife unterscheiden ob es jetzt ein Originalbild oder Vorschaubild ist (-> unterschiedliche Überprüfungen) und weiters muss ich ja auch die "gerade aktuelle" Ziffer damit ich die passenden Kontrollfelder dazu heranziehen kann (-> $projekte_bild? bzw $projekte_bild?v - da stehen die "alten" Bildernamen drin)?

      Bei meiner Suche ist mir auch eval() untergekommen nur blick ich da überhaupt nicht durch :-( wäre das überhaupt der richtige weg?

      1. Ich grüsse den Cosmos,

        Danke für den Tipp nur wie kann ich dann in der Schleife unterscheiden ob es jetzt ein Originalbild oder Vorschaubild ist (-> unterschiedliche Überprüfungen) und weiters muss ich ja auch die "gerade aktuelle" Ziffer damit ich die passenden Kontrollfelder dazu heranziehen kann (-> $projekte_bild? bzw $projekte_bild?v - da stehen die "alten" Bildernamen drin)?

        Da steht genau das drin, was du reinschreibst, aler auch der Inhalt des name-Attributes des file-Tags

        Bei meiner Suche ist mir auch eval() untergekommen nur blick ich da überhaupt nicht durch :-( wäre das überhaupt der richtige weg?

        eval() ist Pfui und nur dann der richtige Weg, wenn nichts anderes mehr geht (also praktisch nie). In deinem Fall würde mir auch nichts einfallen, das es dir helfen könnte.

        Möge das "Self" mit euch sein

        --
        Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
        ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
        1. eval() ist Pfui und nur dann der richtige Weg, wenn nichts anderes mehr geht (also praktisch nie). In deinem Fall würde mir auch nichts einfallen, das es dir helfen könnte.

          Zwar verstehe ich nicht warum eval() Pfui ist aber ich bin jetzt eh ohne ausgekommen. Hab mich gerade bemüht das ganze in eine Funktion zu packen und so wies derzeit ausschaut funktionierts auch. Für alle die dieses Problem auch mal haben oder die Lösung interessiert nachfolgend meine Codeschnipsel.

          (Verbesserungsvorschläge gerne willkommen!)

          Ausgelagerte Codezeilen:

            
          function OriginalBild($file,$nr,$dbvar,$destdir){  
             $size = getimagesize($file['tmp_name']);  
             $width  = $size[0];  
             $height = $size[1];  
             if ($width > 480 || $height > 300){  
                print("<p class='errmsg'><b>Das angegebene Originalbild $nr ist zu gro&szlig; (Breite: $width, H&ouml;he: $height)! Bitte w&auml;hlen Sie ein kleineres!</b><br/><br/><a href='javascript:history.back()'>zur&uuml;ck zum Formular</a></p>");  
                return false;  
             }  
            
             if(!strstr($dbvar,"leer.gif") && file_exists("../media/projekte/".$dbvar)){  
               if(@unlink("../media/projekte/".$dbvar)){  
              echo "<p class='okmsg'>Altes Originalbild ($dbvar) wurde erfolgreich gel&ouml;scht</p>";  
                }else{  
              echo "<p class='errmsg'>Altes Originalbild ($dbvar) konnte NICHT gel&ouml;scht werden</p>";  
               }  
             }  
             if(move_uploaded_file($file['tmp_name'],$destdir.$file['name'])){  
            $dbvar = date("ymdhis_").$file['name'];  
            echo "<p class='okmsg'><b>Upload des Originalbilds $nr ($dbvar) erfolgreich</b></p>";  
            return $dbvar;  
           }else{  
            echo "<p class='errmsg'><b>Fehler beim Upload des Originalbilds $nr</b></p>";  
            $dbvar = "leer.gif";  
            return $dbvar;  
             }  
            return false;  
          }  
            
          function VorschauBild($file,$nr,$dbvar,$destdir){  
             if(!strstr($dbvar,"leer.gif") && file_exists("../media/projekte/".$dbvar)){  
               if(@unlink("../media/projekte/".$dbvar)){  
              echo "<p class='okmsg'>Altes Vorschaubild ($dbvar) wurde erfolgreich gel&ouml;scht</p>";  
                }else{  
              echo "<p class='errmsg'>Altes Vorschaubild ($dbvar) konnte NICHT gel&ouml;scht werden</p>";  
               }  
             }  
             if(move_uploaded_file($file['tmp_name'],$destdir.$file['name'])){  
            $dbvar = date("ymdhis_").$file['name'];  
            echo "<p class='okmsg'><b>Upload des Vorschaubilds $nr ($dbvar) erfolgreich</b></p>";  
            return $dbvar;  
           }else{  
            echo "<p class='errmsg'><b>Fehler beim Upload des Vorschaubilds $nr</b></p>";  
            $dbvar = "leer.gif";  
            return $dbvar;  
             }  
            return false;  
          }  
          
          

          Aufruf der Funktion im Script:

            
           include ("projektbild.php");  
            
           if (isset($_FILES["userimg1"]) && !empty($_FILES["userimg1"]['name'])) {  
             $projekte_bild1 = OriginalBild($_FILES["userimg1"],1,$projekte_bild1,$destdir);  
           }  
           if (isset($_FILES["userimg1v"]) && !empty($_FILES["userimg1v"]['name'])) {  
             $projekte_bild1v = VorschauBild($_FILES["userimg1v"],1,$projekte_bild1v,$destdir);  
           }  
          
          
  2. echo $begrüßung;

    Ich bin mir sicher dass man das sicher eleganter (und vor allem kürzer) lösen könnte anstatt 9 mal den nachfolgenden Code hinschreiben zu müssen (nur mit der Änderung der Ziffer bei den Variablen userimgX, bildX & bildXv)!?

    Für dieses Problem der wiederholten Ausführung gleichen Codes hat man das Konzept der Funktionen erfunden. Man übergibt die variablen Parameter beim Funktionsaufruf, und innerhalb der Funktion arbeitet man dann mit einer Variable, deren Namen man im Funktionskopf definiert hat, und mit der man auf den übergebenen Wert zugreifen kann.

    Wenn du dann den Funktionsaufruf in eine 9-mal zu durchlaufende Schleife legst, ...

    echo "$verabschiedung $name";