当前位置: 首页 > 知识库问答 >
问题:

PHP Checkbox从文件夹中删除文件

司徒俊雄
2023-03-14

我想从名为"fajlovi"的文件夹中删除文件。多个和单个删除应该工作。但是它会删除文件夹中的第一个文件(文件夹中文件数组中的0位置)。如果我检查任何文件,它将删除前4个文件,而不是我检查的文件。下面是代码

    $a = glob("fajlovi/*");
    echo "<br>var_dump of \$a ------------------------<br><pre>";
    var_export($a);
    echo "</pre>end dump od \$a ------------------------<br><br>";
    echo "Number od files in the directory: " . count($a) . "<br>";

    echo "<form method='POST' action='" . $_SERVER['PHP_SELF'] . "'><table >";
    echo "<th>File name:</th><th>Size MB:</th><th>Delete:</th>";
    foreach ($a as $key => $value) {
        echo "<tr><td>" . $value . "</td>";
        echo "<td>" . round(filesize($value) / 1024 / 1024, 5) . " MB <br></td>";
        echo "<td><input type='checkbox' name='checked[]'>" . $img_number = $key + 1 . "</td>";
    }

    echo "<tr><td colspan=3><input type='submit' name='delete' value='Delete'></td></tr>";
    echo "</table></form>";


    if (isset($_POST['delete'])) {
        $checkbox = $_POST['checked'];
        for ($i = 0; $i <= count($a); $i++) {
            if (isset($checkbox[$i])) {
                if (unlink($a[$i])) {
                    echo "Successfully deleted file" . $a[$i] . "<br>";
                }
            }
        }
    }

    if (!empty($_POST['checked'])) {
        var_dump($_POST['checked']);
    }

1.这是页面的截图:

2.然后我检查要删除的图像:

4.再次进入页面后,我们可以看到错误的图像被删除:

共有1个答案

慕容光启
2023-03-14

你需要给你的输入一个值

<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()提供的索引作为查找要删除的文件的方法,而应该使用唯一、明确标识文件的键。至少这意味着使用文件路径本身。例如,在一个场景中,在窗体显示时,将文件添加到ORE中,然后提交并提交删除的选择。您可能最终删除了错误的文件。

相反,您可以在这里传递filepath:

<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>";
  }
}

最后一点建议是:

  • 在执行取消链接之前,您应该检查文件\u exists()是\u文件(),或类似内容。你应该尽你所能确保你只允许删除你想要的文件
 类似资料:
  • 问题内容: 在Java中,我想删除包含文件和文件夹的文件夹中存在的所有内容。 此代码不起作用,执行此操作的最佳方法是什么? 问题答案: 如果您使用Apache Commons IO,那么它是单线的: 请参阅FileUtils.deleteDirectory() 番石榴曾经支持类似的功能: 几个版本之前已将其从Guava中删除。 虽然以上版本非常简单,但也很危险,因为它在不告诉您的情况下做出了许多假

  • 从Java中删除文件夹时发现问题。我使用了以下命令,但运气不好。但是,我可以使用Windows 8.1通过命令提示符删除文件夹: 在这三种情况下,我得到的例外是: java.io.IOException:无法运行程序rmdir:CreateProcess错误=2,系统找不到java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)java.la

  • 问题内容: 例如,我有一个名为“ Temp”的文件夹,我想使用PHP删除或刷新此文件夹中的所有文件。我可以这样做吗? 问题答案: 如果要删除“隐藏”文件(如.htaccess),则必须使用

  • 我有一个名为images的文件夹,位于用户的文件夹中,如: 图像 用户1 当我从数据库中删除一个用户时,我还想删除该用户的所有文件和文件夹。所有这些都在一个包含函数的类中,但是当我执行函数时,我的整个文件夹图像都会被删除。。。 我已经检查了是否选择了正确的用户,路径是否正确。当我在测试的时候。php文件它工作得很好,但在我的函数中它被破坏了。 如果单击“删除”按钮,则转到此功能: 通过给定的id获

  • 问题内容: 有时我会在使用svn时出错,并将文件夹卡在我的存储库中。我想删除这些文件夹,但是我找不到解决方法。请记住,我对SVN非常陌生。我从苹果终端运行此命令: 我收到消息: 我也试过,和。 我需要做什么? 问题答案: 看起来是必需的提交消息,并且您没有将系统配置为启动要添加一个编辑器的编辑器(未在命令行上指定)。 尝试这个:

  • 问题内容: 更新我的adt插件后。每当我创建任何项目时,都会创建“ appcompat v7”文件夹。我使用了这种依赖性。但是问题是假设我当时有5个项目。它会使5个不同的文件夹做什么? 问题答案: 这是ADT / SDK更新的一部分,这并不是一件坏事。它确保您的应用程序完全支持在API 14+中实现的ActionBarActivity。默认情况下,它将在每次创建时创建,但是您只需做一些工作就可以保