Добавьте кнопку php delete для каждого оператора загрузки - PullRequest
0 голосов
/ 29 декабря 2011

Я использую оператор foreach php, чтобы вывести список всех загруженных файлов в каталоге. Это выглядит так:

<?php 
$path = "$dir/";
foreach (glob("$path*") as $filename) {  
    $path_parts = pathinfo($filename);  
    $result = $path_parts['filename'];  
    echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>";
}
?> 

Это распечатывает хороший простой список всех файлов. Что я хотел бы сделать для каждого элемента, это добавить кнопку удаления рядом с ним. Я думаю, что единственный способ сделать это - добавить форму в оператор foreach, просто с помощью кнопки, которая отправляет переменную $filename в некоторый PHP с функцией удаления в.

Единственное, в чем я не уверен, это лучший способ получить имя файла для нового php.

Я имею в виду:

<?php 
$path = "$dir/";
foreach (glob("$path*") as $filename) {  
    $path_parts = pathinfo($filename);  
    $result = $path_parts['filename'];  
    echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>";
    echo "<form method='post' action='delete.php'>
    <button type='submit' name='submit' value='Submit' />
    </form>";                
}
?> 

Таким образом, используя это, я могу создать кнопку рядом с именем файла для удаления, но единственный способ, которым я могу подумать о переносе действительного имени файла в файл PHP для удаления, - добавить скрытое текстовое поле с именем файла как значение.

Это бы сработало, но кажется немного неуклюжим. Кто-нибудь может посоветовать, если это приемлемо или есть лучшая альтернатива?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Добавление имени файла / идентификатора / чего-либо к форме на самом деле не так уж и неудобно ... это больше необходимо, если только вы не хотите, чтобы javascript был обязательным (тогда вы можете получить имя файла у родного брата li или чего-то еще).Однако есть пара проблем:

HTML

У вас есть случайный тег tr (если это br) в конце каждого списка. Ваш li находится внеблока ul или ol, и form должен быть внутри li (то есть вы не можете иметь <ul><li /><form /></ul> в качестве допустимой разметки). Не так уж много, но это может вызвать некоторые проблемы с отображениемдля вас.

Интерфейс пользователя

Было бы довольно досадно нажимать на отдельные "удаления" в длинном списке файлов, и похоже, что от этого не справиться.Лучше было бы, чтобы они были отмечены флажками, чтобы вы могли удалять несколько файлов одновременно и передумать, прежде чем принять окончательное решение. Тогда вам нужна только одна форма, и еще более разумно иметь отдельные входные данные для каждого файла.

Безопасность

Я не уверен, как вы получите $dir (я действительно надеюсь, что глобальные регистры не включены), но вы должны быть абсолютно уверены, что запрашиваемые удаления файлов содержат действительный путь кудалить и желательно не содержать ../ или ведущий / или что-то еще.Вы должны проверить этот ввод.

0 голосов
/ 29 декабря 2011

Достаточно скрытого поля с именем файла, вы можете использовать php's $ _POST, чтобы получить имя файла в другом скрипте. Другой вариант - опубликовать его в сценарии, используя параметр get с именем файла, поэтому вы можете изменить только часть параметра get.

Настоящая проблема заключается в том, что вы должны очистить входные данные, которые получает второй скрипт. Просто очень важно, чтобы люди могли удалять только те файлы, которые им разрешено удалять. Как минимум, вы должны проверить, находится ли файл в определенной папке. Другими вариантами являются только удаление файлов из одной папки (поэтому не принимаются пути) или абстрагирование имен файлов за идентификаторами

...