Foreach 总是删除最后一个文件 PHP

Foreach always delete last file PHP

我想在输入字段旁边添加 "delete file" 按钮,我想删除文件夹注释中的每个文件,分别使用此按钮。 但是 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);

}

您有很多同名输入。当您提交表单时,$_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'];
    // ...

我还建议验证文件名以确保它确实应该被删除。事实上,有人可以 post 他们想要的任何值,并可能删除不应删除的内容。