Foreach всегда удаляйте последний файл PHP - PullRequest
0 голосов
/ 03 января 2019

Я хочу добавить кнопку «Удалить файл» рядом с полем ввода, и я хочу удалить каждый файл в папке заметок, с помощью этих кнопок отдельно.Но foreach ВСЕГДА удаляет последний файл .Как это исправить?И почему foreach всегда выбирает последний файл в массиве?

<form method="post" action="file_operation.php" id="delete_form">
<?php
$scan = scandir('notes/');

foreach($scan as $file)
{
    if (!is_dir("notes/$file"))
    {

        ?>
        <?php //echo $file.'<br>'; ?>
        <div class="col-md-6">
        <input type="text" name="file_name" placeholder="" value="<?php echo $file; ?>">
        <input type="submit" value="Delete File" name="delete_file">

        </div>
        <?
    }
}
?>

</form>

источник файловой операции

if(isset($_POST['delete_file']))
{
 $file_name=$_POST['file_name'];
 $folder="notes/";
 #$ext=".txt";
 $ext='';
 $file_name=$folder."".$file_name."".$ext;
  echo "file ".$file_name." deleted";
  #exit();
 unlink($file_name);

}

1 Ответ

0 голосов
/ 03 января 2019

У вас есть много входов с одинаковым именем.Когда вы отправляете форму, значение $_POST['file_name'] будет значением последнего ввода с именем file_name.Вот почему он всегда удаляет последний файл.

Я бы предложил использовать кнопку вместо ввода.Таким образом, вы можете присвоить значение кнопке, чтобы вы могли легко получить значение нажатой кнопки в $_POST.

<?php echo $file ?>
<button type="submit" name="delete_file" value="<?php echo $file ?>">
    Delete File
</button>

Затем в вашем обработчике отправки:

if(isset($_POST['delete_file']))
{
    // now the submit button has a value of the file name to delete
    $file_name = $_POST['delete_file'];
    // ...

Я бы также предложил проверить имя файла, чтобы убедиться, что оно действительно должно быть удалено.Таким образом, кто-то может опубликовать любое значение, которое он хочет, и потенциально удалить то, что не должно быть удалено.

...