-1

我正在尝试制作表格以删除images目录中的子目录中的选定选项。我有一个函数可以删除子文件夹中的所有文件,然后删除整个子文件夹,但是当我调用它时,什么也没有发生。有人能帮我吗?这是我的 html 表单和 php 代码:

    <form method='post' action='/category'>
    <div class="form-group">
    <select  class="custom-select" name="category_to_delete" style="width:60%;">
    <?php 

    foreach(glob(dirname(__FILE__) . '/images/*') as $categories_list){
       if(is_dir($categories_list)){
          $categories_list = basename($categories_list);

    echo "<option value='" . $categories_list . "'>".$categories_list."</option>";
       }
    }
    ?>

    </select>
    </div>
    <?php
    function delete_directory($dirname) {
       if (is_dir($dirname))
          $dir_handle = opendir($dirname);
       if (!$dir_handle)
          return false;
       while($file = readdir($dir_handle)) {
             if ($file != "." && $file != "..") {
               if (!is_dir($dirname."/".$file))
                  unlink($dirname."/".$file);
               else
                  delete_directory($dirname.'/'.$file);
            }
        }
        closedir($dir_handle);
        rmdir($dirname);
        return true;
        }
        if(isset($_POST['delete'])){
           if(isset($_GET['category_to_delete']) && $_GET['category_to_delete']!=''){
                $category_delete = $_POST['category_to_delete'];
                delete_directory('images/'.$category_delete);
                echo "Deleted";
           }
        }

       ?>
       <div class="form-group">          
       <button type='submit' value='Delete' name='delete'> Usuń</button>
       </div>
</form>
4

1 回答 1

0

我在你的脚本中发现了错误。这是答案,希望这能解决它(如果某处没有另一个错误):

您的表单使用method="post"发送:<form method='post' action='/category'>

在您的代码中,您检查$_GET

错误的: if(isset($_GET['category_to_delete']) && $_GET['category_to_delete']!=''){

正确的:if(isset($_POST['category_to_delete']) && $_POST['category_to_delete']!=''){

最终代码必须如下所示:

if(isset($_POST['delete'])){
    if(isset($_POST['category_to_delete']) && $_POST['category_to_delete']!=''){
            $category_delete = $_POST['category_to_delete'];
            delete_directory('images/'.$category_delete);
            echo "Deleted";
    }
}

另请注意,您检查isset($_POST['delete'])-> 它是您的按钮。如果您不单击按钮并按 Enter 发送,<form>则没有$_POST['delete'],它将不起作用。

为您提供更多信息:

您的功能delete_directory和您的表单处理if(isset($_POST['delete'])){放在您的foreach(glob(dirname(__FILE__) . '/images/*') as $categories_list){

这意味着,如果您想删除某些内容并发送表单来执行此操作。下拉/选择将再次包含文件,因为images/*在您真正处理表单(删除您选择的文件/目录)之前,将再次扫描目录中的文件。你应该把表格的功能和处理放在类别之前。通常这样的事情会在任何 HTML/输出处理之前完成。

于 2020-06-08T21:08:36.607 回答