2014-01-15 49 views
0

我正在使用PHP和MySQL創建一個drop box系統。我面臨的問題是我需要刪除一個文件夾並刪除其中的所有文件夾和文件。它適用於兩個文件夾,但是當我有3個文件夾時它不會刪除它們。以下是PHP中的代碼。請幫幫我。在MySQL中刪除

<?php 
session_start(); 
require 'connection.php'; 
$folderid = $_GET['folderid']; 


function rrmdir($dir) { 
if (is_dir($dir)) { 
$objects = scandir($dir); 
foreach ($objects as $object) { 
    if ($object != "." && $object != "..") { 
    if (filetype($dir."/".$object) == "dir") 
     rrmdir($dir."/".$object); 
    else unlink ($dir."/".$object); 
    } 
} 
reset($objects); 
rmdir($dir); 
} 
    $delete = mysql_query("DELETE FROM file WHERE id='$folderid'"); 
} 




if($folderid != ""){ 
$result = mysql_query("SELECT file.path FROM ftpdb.file WHERE ftpdb.file.fileID =   $folderid"); 
$qry = mysql_fetch_assoc($result); 
$dir = $qry['path']; 
//Calls a function which deletes all the files and folder in a pathy specified above 
rrmdir($dir); 
//Delete From database files and folders if the folderID is not null 
$delete = mysql_query("DELETE FROM file WHERE fileID='$folderid' OR parentFolder = '$folderid'"); 
$deleteFiles = mysql_query("DELETE FROM file_files WHERE folder_id = '$folderid'"); 
$_SESSION['error'] = "Folder has been deleted"; 
header("location: client.php"); 
}else{ 
$_SESSION['error'] = "Error occured please try again"; 
header("location: client.php"); 
} 
?> 

這是我設法刪除test文件夾,當我刪除回家,但沒有測試是在測試數據庫。我認爲,SQL語句是不正確 The database is shown in the image below

回答

1

我相信你會想自己找出來。所以,讓我爲你提供一個合適的谷歌鏈接:https://www.google.de/search?q=mysql+recursion

如果你想知道如何將任意複雜的select語句轉換成delete語句:

DELETE FROM table WHERE id IN (SELECT id FROM table)

0

試試這個

$result = mysql_query("SELECT file.path FROM ftpdb.file WHERE ftpdb.file.fileID ='$folderid'"); 
+0

它正在刪除問題是thirg文件夾正在獲取81的id,並且sql stsament只會刪除文件夾id = 72的位置 – user2970434

0

你只有一個值$folderid。試想一下,如果rrmdir遞歸很深,刪除大量文件夾。通過刪除$folderid以及$folderid作爲父項,您無法全部捕獲它們。這隻有一個深度!

你的SQL代碼需要進入rrmdir,這樣你也可以遞歸地從數據庫中刪除東西。

然後刪除所有你要麼需要將文件夾:

  • 查找每個文件夾的ID。 (當循環子項時,你可以從SQL中獲得這個值,並將其作爲第二個參數傳遞給rrmdir。)
  • 或者,找到要刪除的記錄,而不是它的路徑名。

我還注意到你的最後一個記錄在//testing有兩個斜線。這將使得難以通過路徑找到匹配!我會建議在進入數據庫之前展開這樣的路徑!

我也在考慮製作自己的Dropbox,但我打算使用類似unison的東西,由幾個shellcripts驅動。