使用复选框显示目录中的文件列表



我试图在一个目录中显示所有.txt文件的列表,每个文件旁边都有复选框。然后选中所需文件的复选框,下一个过程将从目录中删除这些文件。我有以下代码来显示目录中的文件,但不知道如何在文件名旁边创建复选框。

// Define the full path to your folder from root 
$path = "/var/www/vhosts/default/htdocs/Members/$company/Users/$insp_name/Orders/Clients"; 
// Open the folder 
$dir_handle = @opendir($path) or die("Unable to open $path"); 
// Loop through the files 
while ($file = readdir($dir_handle)) {
  if($file == "." || $file == ".." || $file == "index.php" ) 
    continue; 
  echo "$file<br />";
}
// Close 
closedir($dir_handle);

注意:在下面的if块中,为了清晰起见,在continue周围使用大括号。否则,看起来echo发生在if块内部,而不是在它完成之后。

if($file == "." || $file == ".." || $file == "index.php" ) 
{
  continue; 
}
// Prints a checkbox after each file.
// The checkboxes are received by the form handler as an array called $files[]
// holding the filenames of the files you want deleted.
echo "<input type='checkbox' name='files[]' value='$file' /> $file<br />n";

现在使用您的表单处理脚本:

$path = "/var/www/vhosts/default/htdocs/Members/$company/Users/$insp_name/Orders/Clients";
foreach($_POST['files'] as $filename) {
  // To prevent traversal attacks, you need to validate $filename
  // For example, if it would only be expected to be alphanumeric:
  if (ctype_alnum($filename)) {
    if(!unlink($path . "/" . $filename)) {
       echo "Error deleting $filename";
    }
  }
}

关于验证的注意事项:验证$filename的内容以确保其不包含空字节非常重要,或者验证../../../以允许修改预期路径之外的文件非常重要。在上面用ctype_alnum()完成的示例中,但不同的正则表达式或in_array()可能更适合给定的情况。

echo '<input type="checkbox" name="files" value="whatever" /> ' . $file . '<br />';

这应该在列表中的每个文件旁边创建一个checkbox元素。

此外,请注意,您的代码格式非常令人困惑——continue使它看起来好像将运行每一次迭代,无论发生什么。考虑将它放在与if语句相同的行上,或者放在下面的行上适当缩进。或者放在{ }中。

将echo语句替换为:

echo "<input type="checkbox" name="files[]" value="$file">$file<br/>";

只需在输出文件的名称之前回显INPUT元素

echo "<input type="checkbox" value="$file" name="files[]" />$file<br />";

您可能还想将! is_file($path.DIRECTORY_SEPARATOR.$file)添加到if语句中,以确保它是一个文件而不是一个目录

if ( $file == "." || $file == ".." || $file == "index.php" || ! is_file($path.DIRECTORY_SEPARATOR.$file) ) 

相关内容

  • 没有找到相关文章

最新更新