PHP复选框从文件夹中删除文件

PHP复选框从文件夹中删除文件,php,checkbox,delete-file,Php,Checkbox,Delete File,我想从名为“fajlovi”的文件夹中删除文件。多删除和单删除应该可以工作。但它会删除文件夹中的第一个文件(文件夹中文件数组中的0位置)。如果我检查任何文件,它将删除前4个文件,而不是我检查的文件。代码如下: $a = glob("fajlovi/*"); echo "<br>var_dump of \$a ------------------------<br><pre>"; var_export($a); echo "<

我想从名为“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']);
    }
$a=glob(“fajlovi/*”);
echo“\$a的变量转储----------------------
”;
<input type='checkbox' name='checked[]' value='{$key}'>
var_出口(a美元); 回显“结束转储od\$a--------------------

”;
<input type='checkbox' name='checked[]' value='{$key}'>
echo“目录中的od文件数:”。计数($a)。“
”; 回声“; echo“文件名:大小MB:删除:”; foreach($a作为$key=>$value){ 回显“$value.”; echo“.round(文件大小($value)/1024/1024,5)。“MB
”; 回显“$img_编号=$key+1”; } 回声“; 回声“; 如果(isset($_POST['delete'])){ $checkbox=$_POST['checked'];
对于($i=0;$i您需要为您的输入提供一个值

$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>";
  }
}
然后使用它们而不是索引

$files=glob('fajlovi/*');
$pathsToDelete=array_intersect((array)($_POST['checked']??[]),$files);
foreach($pathsToDelete作为$filepath){
if(取消链接($filepath)){
echo“已成功删除文件”。$files[$index]。“
”; } }
最后一点建议是:

  • 在取消链接之前,您应该检查
    文件\u exists()
    是\u file()
    ,或类似内容。您应该尽一切努力确保只允许删除您想要的文件

我还在学习PHP,所以我不理解这一行的这一部分“?[],”行:数组相交($\u POST['checked']?[],数组键($files))。你能解释一下吗?谢谢
是一个。那段代码说“如果$\u POST没有'checked'属性,则默认为空数组。无论如何,请确保我们正在将数组传递到
array\u intersect()
”。这避免了一些嵌套条件和循环设置。此外,整个
array\u intersect()
行有效地从
$\u POST['checked']中过滤出错误数据。”
。它确保
$pathsToDelete
只包含可供循环使用的有效值,或不包含任何值。[]-这是空字符串还是选中的图像?ThanxIt的速记数组语法。它相当于
数组()
$files = glob('fajlovi/*');
$pathsToDelete = array_intersect((array)($_POST['checked'] ?? []), $files);

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