0
        <?php
        function remove_directory($directory) {
            if (is_dir($directory) === true) {
                $contents = scandir($directory);
                unset($contents[0], $contents[1]);

                foreach($contents as $object) {
                    $current_object = $directory.'/'.$object;
                    if (filetype($current_object) === 'dir') {
                        remove_directory($current_object);
                        } else {
                        unlink($current_object);    
                        }
                    }
                    rmdir($directory);
                }
            }

        ?>
        <h1>DELETE</h1>
        <form action="" method="get">
           <?php if (isset($_GET['delete']) === true) {
               remove_directory('files/folder'); / when I click that submit button must delete only 'folder' not all 'folder1' and 'folder2'
                }
            ?>
            <input type="submit" name="delete"/>
        </form>
        <form action="" method="get">
           <?php if (isset($_GET['delete']) === true) {
               remove_directory('files/folder1'); // when I click that submit button must delete only 'folder1'
                }
            ?>
            <input type="submit" name="delete"/>
        </form>
        <form action="" method="get">
           <?php if (isset($_GET['delete']) === true) {
               remove_directory('files/folder2');  // when I click that submit button must delete only 'folder2'
                }
            ?>
            <input type="submit" name="delete"/>
        </form>

送信ボタンをクリックすると、送信されたファイルのみを削除したい。しかし、送信ボタンをクリックすると、送信されたファイルではなくディレクトリ内のすべてのファイルが削除されます...最初のボタンをクリックすると、すべてではなく「ファイル/フォルダー」のみを削除する必要があります...どうすればそれを取得できますか???? 関数 remove_directory があります。私のプログラムが $_GET 変数を使用していることは知っていますが、それを修正する方法がわかりません。しかし、送信ボタンを 1 つだけクリックすると、すべてのフォルダー (フォルダー、フォルダー 1、フォルダー 2) が削除されます。

4

2 に答える 2

1

PHPコードはサーバー上で実行され、作成されたHTMLはクライアントに送信されます。PHPコードをフォームに配置しても、そのコードがフォームの送信時に実行されるわけではありません。実際、フォームにはまったく接続されていません。

代わりに、を使用してフォームで削除するディレクトリを送信する必要があります<input type="hidden">

また、GETの代わりにPOSTを使用することをお勧めします。

    <?php
    function remove_directory($directory) {
        if (!is_dir($directory)) return;

        $contents = scandir($directory);
        unset($contents[0], $contents[1]);

        foreach($contents as $object) {
            $current_object = $directory.'/'.$object;
            if (filetype($current_object) === 'dir') {
                remove_directory($current_object);
            } else {
                unlink($current_object);    
            }
        }

        rmdir($directory);
    }

    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['dir'])) {
        $dir = basename($_POST['dir']);
        if ($dir[0] != '.') remove_directory("files/$dir");
    }

    ?>
    <h1>DELETE</h1>
    <form action="" method="post">
        <input type="hidden" name="dir" value="folder" />
        <input type="submit" name="delete"/>
    </form>
    <form action="" method="post">
        <input type="hidden" name="dir" value="folder2" />
        <input type="submit" name="delete"/>
    </form>
    <form action="" method="post">
        <input type="hidden" name="dir" value="folder1" />
        <input type="submit" name="delete"/>
    </form>
于 2013-01-19T18:51:16.777 に答える
0

IFステートメントを次のように変更します。

if (isset($_GET['delete']) === 'folder')

また、各フォームで目的のフォルダー名を渡す必要があります。

<input type="hidden" name="delete" value="folder">

これで問題は解決するはずです。

于 2013-01-19T18:44:46.357 に答える