我使用foreach php语句列出目录中的所有上传文件。 它看起来像这样:
<?php
$path = "$dir/";
foreach (glob("$path*") as $filename) {
$path_parts = pathinfo($filename);
$result = $path_parts['filename'];
echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>";
}
?>
这会打印出所有文件的简单列表。
我想为每个项目做些什么,就是在它旁边添加一个删除按钮。我认为唯一的方法就是在foreach
语句中添加一个表单,只需一个按钮就可以将$filename
变量发布到带有删除功能的PHP中。
我唯一不确定的是将文件名转换为新php的最佳方式。
我正在思考:
<?php
$path = "$dir/";
foreach (glob("$path*") as $filename) {
$path_parts = pathinfo($filename);
$result = $path_parts['filename'];
echo "<li><a href='" . $filename ."'/>". $result . "</a></li><tr>";
echo "<form method='post' action='delete.php'>
<button type='submit' name='submit' value='Submit' />
</form>";
}
?>
所以使用它,我可以在文件名旁边创建一个按钮进行删除,但是我能想到将实际文件名转到删除PHP文件的唯一方法是添加一个隐藏文本字段,文件名为价值。
这可行,但看起来有点笨重。任何人都可以建议这是否可以接受或是否有更好的选择?
答案 0 :(得分:1)
在表单中添加文件名/ id /其他内容并不是那么笨重...除非你想要javascript是必需的,否则它更有必要(那么你可以从兄弟li
获取文件名或者但是,有一些问题:
您在每个列表的末尾都有一个随机tr
标记(应该是br
)。您的li
不在ul
或ol
块之内,而form
必须在li
之内(您不能拥有<ul><li /><form /></ul>
$dir
}作为有效标记)。没什么大不了的,但这可能会给你带来一些显示问题。
在长文件列表中点击单个“删除”会非常烦人,看起来没有办法从中恢复。更好的方法是让它们成为复选框,这样你就可以一次删除多个文件,并在最终决定之前改变主意。然后,您只需要一个表单,为每个文件提供单独的输入更有意义。
我不确定你是怎么得到的../
(我真的希望注册全局变量没有开启),但是你应该绝对确定所请求的文件删除包含一个有效的删除路径,最好不要包含/
或领先的{{1}}或其他内容。您应验证此输入。
答案 1 :(得分:0)
带有文件名的隐藏字段就足够了,您可以使用php的$ _POST来获取其他脚本中的文件名。另一种选择是使用带有文件名的get参数将其发布到脚本中,因此您只需更改get参数部分。
真正的问题是你应该清理第二个脚本收到的输入。人们只能删除允许删除的文件,这一点非常重要。 至少应检查文件是否在特定文件夹中。其他选项只删除一个文件夹中的文件(因此不接受路径)或将文件名抽象出id的背后