Удалить файл, выбранный в раскрывающемся списке

Пытаюсь сделать выпадающий список, отображающий файлы из определенной папки, с кнопкой Удалить для удаления выбранного файла.

Выпадающий список:

<?php
    $dirname = "files";
    $dir = opendir($dirname);
    echo '<form action="delete.php" method="get">';
    echo '<select name="file2">';
    while(false != ($file = readdir($dir)))
    {
        if(($file != ".") and ($file != ".."))
        {
            echo "<option value=".$file.">$file</option>";
        }
    }
    echo '</select>';
    echo '<input type="submit" value="Delete" class="submit" />';
    echo '</form>';
?>

файл delete.php:

<?php
    $dirpath = "files";
    $file_to_delete = $_POST['file2'];
    if ( unlink ($dirpath.'/'.$file_to_delete) ) {
        echo $file_to_delete . " deleted.";
    } else {
        echo "Error.";
    }
?>

Когда я затем пытаюсь выбрать файл и нажимаю удалить, я получаю следующую ошибку:

Предупреждение: unlink(files/): это каталог в /xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/delete.php в строке 4. Ошибка.

xxx'ed из-за конфиденциальности :) все файлы, которые пытаются удалить, - это chmod 777. это просто файл .txt, который я пытаюсь удалить.

Не уверен, что мне не хватает или что я здесь сделал не так... :/


person denully    schedule 06.09.2012    source источник
comment
Вы когда-нибудь пытались посмотреть, что приходит print_r($_POST['file2']), прежде чем пытаться удалить?   -  person Mihai Iorga    schedule 06.09.2012


Ответы (1)


Это $_GET, потому что в вашей форме есть method="get":

$file_to_delete = $_GET['file2'];

so:

<?php
    $dirpath = "files";
    $file_to_delete = $_GET['file2'];
    if ( unlink ($dirpath.'/'.$file_to_delete) ) {
        echo $file_to_delete . " deleted.";
    } else {
        echo "Error.";
    }
?>

Если вы хотите опубликовать сообщение, измените форму на method="post".

person Mihai Iorga    schedule 06.09.2012
comment
Ах, гениально. :) узнавать что-то новое каждый день. Спасибо большое Михай. - person denully; 06.09.2012