Codevereinfachung - aber wie?
erawan
- php
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ß (Breite: $width, Höhe: $height)! Bitte wählen Sie ein kleineres!</b><br/><br/><a href='javascript:history.back()'>zurü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öscht</p>";
}else{
echo "<p class='errmsg'>Altes Originalbild ($projekte_bild1) konnte NICHT gelö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öscht</p>";
}else{
echo "<p class='errmsg'>Altes Vorschaubild ($projekte_bild1v) konnte NICHT gelö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";
}
}
Hallo,
Du kannst alle hochgeladenen Dateien mit dem $_FILES-Array durchlaufen:
foreach($_FILES as $file)
{...}
Grüße Basti
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?
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
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ß (Breite: $width, Höhe: $height)! Bitte wählen Sie ein kleineres!</b><br/><br/><a href='javascript:history.back()'>zurü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öscht</p>";
}else{
echo "<p class='errmsg'>Altes Originalbild ($dbvar) konnte NICHT gelö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öscht</p>";
}else{
echo "<p class='errmsg'>Altes Vorschaubild ($dbvar) konnte NICHT gelö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);
}
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";