dlete mehrere Dateien vom ordner und datenbank

hups1803

Erfahrenes Mitglied
Hallo,

ich benutze den Explorer filemanager und möchte die lösch funktion erweitern so das er die daten aus der datenbank ebenfals löscht.

folgende fun_del.php habe ich

PHP:
function del_items($dir)
{
	// check if user is allowed to delete files
	if (!permissions_grant($dir, NULL, "delete"))
		show_error($GLOBALS["error_msg"]["accessfunc"]);
	
	$cnt=count($GLOBALS['__POST']["selitems"]);
	$err=false;
	
	// delete files & check for errors
	for($i=0;$i<$cnt;++$i) {
		$items[$i] = stripslashes($GLOBALS['__POST']["selitems"][$i]);
		$abs = get_abs_item($dir,$items[$i]);
	
		if(!@file_exists(get_abs_item($dir, $items[$i]))) {
			$error[$i]=$GLOBALS["error_msg"]["itemexist"];
			$err=true;	continue;
		}
		if(!get_show_item($dir, $items[$i])) {
			$error[$i]=$GLOBALS["error_msg"]["accessitem"];
			$err=true;	continue;
		}

//datenbank verbindung zum löschen
 $mysql = new db();
$mysql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb);
  
 $row_count = $mysql->db_Delete("hupsi_share", "url IN(" . implode(',', $items[$i]) . ")");	
    
		// Delete
		$ok=remove(get_abs_item($dir,$items[$i]));
		
		if($ok===false) {
			$error[$i]=$GLOBALS["error_msg"]["delitem"];
			$err=true;	continue;
		}
		
		$error[$i]=NULL;
	}
	
	if($err) {			// there were errors
		$err_msg="";
		for($i=0;$i<$cnt;++$i) {
			if($error[$i]==NULL) continue;
			
			$err_msg .= $items[$i]." : ".$error[$i]."<BR>\n";
		}
		show_error($err_msg);
	}
	
	header("Location: ".make_link("list",$dir,NULL));
}

die checkbox seht so aus

Code:
<input type="checkbox" onclick="javascript:Toggle(this);" value="hups_bridge_to_eternity_by_nmsmith.jpg" name="selitems[]">

ich bekomme das irgenwie nicht hin

diese zeile macht mir kopfschmerzen

url IN(" . implode(',', $items[$i]) . ")

wie lösche ich in diesen fall daten aus der db auch wenn mehrere Checkboxen angecklickt sind

hatte das

PHP:
//datenbank verbindung zum löschen
 $mysql = new db();
$mysql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb);
  
 $row_count = $mysql->db_Delete("hupsi_share", "url IN(" . implode(',', $items[$i]) . ")");

vor dem eigendlichen remove eingefügt
 
Zuletzt bearbeitet:
ok soweit hab ich es hinbekommen das er die files in der db löscht

PHP:
$row_count = $mysql->db_Delete("hupsi_share", "url = '".$items[$i]."'");

jetzt wird es kompliziert, wenn ich nun einen Ordner samt inhalt im explorer lösche mach er immoment nix nur files gehen ohne ordner.

Die rmove Zeile sieht so aus

PHP:
$ok=remove(get_abs_item($dir,$items[$i]));

wie muss ich es machen das wenn man im explorer einen ordner löscht der Inhalt auch aus der DB gelöscht wird?
 
Wie sieht denn die zugehörige Datenbanktabelle aus? Vermutlich hat jeder Datensatz eine ID und eine Eltern-ID. Du musst die ID des Verzeichnisses löschen und anhand dieser die Datensätze finden, die diese als Eltern-ID haben. Die kannst du auch löschen. Du musst aber auch darauf achten, dass du theoretisch auch Verzeichnisse in Verzeichnissen hast. Dementsprechend musst du das vielleicht rekursiv lösen. Oder Yaslaw hat wieder eine geniale Umsetzung in SQL, die ich dir aber nicht bieten kann.
 
die tabelle sieht so aus

Code:
`id` int(11) NOT NULL AUTO_INCREMENT,
  `usersess` text,
  `user_id` int(11) DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `url` varchar(155) DEFAULT NULL,
  `prof` text,
  `profname` varchar(255) DEFAULT NULL,
  `dl_pfad` text,
  `comments` text,
  `xmail` varchar(255) DEFAULT NULL,
  `profmail` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
 
Wie jetzt? Und wie sind da jetzt die Daten gespeichert? Also könnte man da mal einen kurzen Auszug davon sehen? Weil dort ist doch nicht normalisiert und nichts sinnvoll organisiert.
 
Ich sehe in deinen Daten der DB keinen Ordner sondern nur Dateinamen. Sind die Dateinamen über die Ordner hinweg eindeutig? Oder woher weiss dein Code in welchem Ordner die Datei aus deiner Tabelle liegt?
 
die dateien sind eindeutig der pfad zur datei setzt sich aus dl_pfad + url zusamen

die daten aus der url sprich die dateinamen sind einzigartig darüber könnet man es machen .

habe ich hier beim einzel löschen auch so gemacht.

PHP:
$row_count = $mysql->db_Delete("hupsi_share", "url = '".$items[$i]."'");

$items[$i] == bildername== datenbank-feld url

es gibt in der datenbank leider keine ordner namen alleine nur als pfad in dem db Feld dl_pfad
 
Zurück