显示目录中带有复选框的文件列表

时间:2011-06-16 16:07:21

标签: php file checkbox directory

我正在尝试显示目录​​中所有.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);

4 个答案:

答案 0 :(得分:4)

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

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()可能更合适。

答案 1 :(得分:0)

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

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

另外,请注意您的代码格式非常混乱 - continue使其看起来好像每次迭代都会运行,无论如何。考虑将它放在与if语句相同的行上,或者放在下面一行,适当缩进。或者将其放在{ }

答案 2 :(得分:0)

用以下代码替换你的echo语句:

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

答案 3 :(得分:0)

只需在输出文件名

之前回显一个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) )