PHP Флажок для удаления файлов из папки - PullRequest
0 голосов
/ 21 февраля 2020

Я хочу удалить файлы из папки с именем "файлови". Многократное и одиночное удаление должно работать. Но он удаляет первый файл в папке (0 позиций в массиве файлов в папке). Если я проверю какие-либо файлы, он удалит первые 4 файла вместо файлов, которые я проверял. Вот код:

<code>    $a = glob("fajlovi/*");
    echo "<br>var_dump of \$a ------------------------<br><pre>";
    var_export($a);
    echo "
конечный дамп od \ $ a ------------------------

"; echo Msgstr "Количество файлов в каталоге:". Count ($ a). "
"; echo " "; echo" Имя файла: Размер МБ: Удалить:"; foreach ($ a as $ key => $ value) {echo" ". $ Value.""; echo" ". Round (размер файла ($ value) / 1024/1024, 5)." MB
"; echo" ". $ img_number = $ key + 1."";} echo" удалять "; echo" "; if (isset ($ _ POST ['delete'])) {$ checkbox = $ _POST ['checked']; для ($ i = 0; $ i <= count ($ a); $ i ++) {if (isset ($ checkbox [$ i])) {if (unlink ($ a [$ i]))) {echo "Успешно удаленный файл". $ a [ $ i]. "<br>";}}}} if (! empty ($ _ POST ['checked'])) {var_dump ($ _ POST ['check']);}

1. Это скриншот страницы:

enter image description here

2. затем я проверяю изображения, которые хочу удалить:

enter image description here

3. После нажатия кнопки Удалить эта это результат: enter image description here

4. И после повторного входа на страницу мы видим, что неправильные изображения удаляются:

enter image description here

1 Ответ

1 голос
/ 21 февраля 2020

Вам нужно дать вашим входам значение

<input type='checkbox' name='checked[]' value='{$key}'>

Вот некоторый код, который направит вас в нужном направлении.

$files = glob('fajlovi/*');
$indicesToDelete = array_intersect((array)($_POST['checked'] ?? []), array_keys($files));

foreach ($indicesToDelete as $index) {
  if (unlink($files[$index])) {
      echo "Successfully deleted file" . $files[$index] . "<br>";
  }
}

Я бы не стал реализовывать удаление как это все же. Вместо использования индексов, предоставляемых glob(), в качестве метода поиска файлов для удаления, вы должны использовать ключ, который однозначно и однозначно идентифицирует файл. По крайней мере, это означает использование самого пути к файлу . Рассмотрим, например, сценарий, в котором добавляются файлы или файлы, которые удаляются между отображением формы и выбором и отправкой выбора для удаления. Вы можете удалить неправильные файлы.

Вместо этого вы можете указать здесь путь к файлу:

<input type='checkbox' name='checked[]' value='{$value}'>

И затем работать с ними вместо индексов.

$files = glob('fajlovi/*');
$pathsToDelete = array_intersect((array)($_POST['checked'] ?? []), $files);

foreach ($pathsToDelete as $filepath) {
  if (unlink($filepath)) {
      echo "Successfully deleted file" . $files[$index] . "<br>";
  }
}

В качестве последнего совета:

  • Вы должны проверить file_exists(), is_file() или аналогичный перед тем, как выполнить отмену связи. Вы должны делать все возможное, чтобы разрешить удаление только тех файлов, которые вы хотели.
...