我正在尝试显示目录中所有.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);
答案 0 :(得分:4)
注意:在以下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()
可能更合适。
答案 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) )