我试图在一个目录中显示所有.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) )