Hallo Henry,
als Ansatz nicht schlecht, aber einiges geht eleganter und vor allem sicherer.
$mess= $rescue = ''; // nicht wirklich notwendig aber verhindert error notice(nicht deklarierte Variable)
Doch, notwendig, damit man sich richtiges Programmieren gleich angewöhnt. Irgendwann fällt einem das nämlich sonst auf die Füße.
Die folgenden Variablen könnten auch Konstanten sein, das erspart dir später die Verwendung mit $_GLOBALS
:
$fl = basename($_SERVER['PHP_SELF']); $verz = 'img/'; // in dem Fall slash am ende, wenn im gleichen Ordner wie bilder dann natürlich nicht $delkey = 'GARB_';
Also z.B. define('VERZ', 'img/');
if(isset($_POST['del_post']) && file_exists($verz.$_POST['del_post'])) { $fl2del = $verz.$_POST['del_post']; $delfl = $verz.$delkey.$_POST['del_post']; if(rename($fl2del,$delfl) ){$mess = '<h3">Datei: '.$_POST['del_post'].' wurde gelöscht</h3>';} else{$mess = ('<h3 style="color:red;">ERROR: Fehler im System1</h3>');} }
Diese Teil ↑ ist gefährlich! Mit den Entwickler-Tools des Browsers (oder oldschool mit curl) kann ich auch einen POST-Request beliebig manipulieren. An der Stelle oben wird nicht geprüft, ob $_POST['del_post']
Slashes enthält, sprich, ob dieser Code nicht Dateien außerhalb des Verzeichnisses umbenennt.
Dieses Problem besteht bei der Wiederherstellung natürlich ebenfalls.
function bildausgabe($mod='') { // lokale Variablen Dank Konstanten nicht nötig … //erlaubte Endungen (nach Bedarf anpassen) $ext = array('jpg','png','gif','ico');
Dieses Array ↑ und die daraus resultierenden lokalen Variablen sind IMHO besser außerhalb der Funktion aufgehoben, weil sie dann nur einmal angelegt werden und nicht bei jedem Funktionsaufruf.
// Verzeichnis auslesen als Array $img_ar = glob($ext_pat, GLOB_BRACE); $outp = ''; // nicht wirklich notwendig aber verhindert error notice $outp_del = ''; // nicht wirklich notwendig aber verhindert error notice foreach( $img_ar as $img) { // Gelöscht markierte Bilder finden, seperat auflisten und schleife überspringen damit diese Dateien nicht in der eigentlichen Liste erscheinen if(strpos($img,$delkey)){ $outp_del .= '<div><button name="del_rescue" value="'.basename($img).'" type="submit" class="imgdel">HERSTELLEN</button><img src="'.$img.'" alt=""></div>'."\r\n"; continue; }
Hier fehlt oben und unten jeweils die Behandlung des Kontextwechsels nach HTML. Wie ich schon schrieb, sind die „htmlspecialchars“ gültige Zeichen in Dateinamen.
$outp .= '<div><button name="del_post" value="'.basename($img).'" type="submit" class="imgdel">LÖSCHEN</button><img src="'.$img.'" alt=""></div>'."\r\n"; } // end foreach
Solche Kommentare ↑ kannst du dir sparen, indem du deinen Code nach Verschachtelungstiefe einrückst. Das erleichtert das Lesen ungemein.
Viele Grüße
Robert