我正在使用PHP和MySQL来创建一个投递箱系统。我面临的问题是我需要删除一个文件夹并删除其中的所有文件夹和文件。它适用于两个文件夹,但当我有3个文件夹时,它不会删除它们。下面是PHP中的代码。请帮帮我。
<?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");
}
?>
这是我在删除主页时设法删除测试文件夹的数据库,但没有测试哪些是在测试中。我认为sql语句不正确
答案 0 :(得分:1)
我相信你会想要自己找到它。所以,让我为您提供一个合适的谷歌链接:https://www.google.de/search?q=mysql+recursion
如果您想知道如何将任意复杂的select语句转换为delete语句:
DELETE FROM table WHERE id IN (SELECT id FROM table)
答案 1 :(得分:0)
试试这个
$result = mysql_query("SELECT file.path FROM ftpdb.file WHERE ftpdb.file.fileID ='$folderid'");
答案 2 :(得分:0)
您只有一个值$folderid
。想象一下,如果rrmdir
非常深入,那么删除大量文件夹。删除$folderid
以及$folderid
作为父级的内容时,您无法抓住所有内容。这只是深入一层!
您的SQL代码需要进入rrmdir
,以便您也可以递归地从数据库中删除内容。
然后删除您需要的所有文件夹:
rrmdir
。)我还注意到你的最后一条记录在//testing
处有两个斜杠。这将使通过路径找到匹配变得更加困难!我建议在它们进入数据库之前展平这样的路径!
我也想制作自己的Dropbox,但我打算使用像unison这样的东西,由几个shellcript驱动。