添加php删除按钮到foreach upload语句

时间:2011-12-29 14:37:46

标签: php forms variables submit delete-file

我使用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文件的唯一方法是添加一个隐藏文本字段,文件名为价值。

这可行,但看起来有点笨重。任何人都可以建议这是否可以接受或是否有更好的选择?

2 个答案:

答案 0 :(得分:1)

在表单中添加文件名/ id /其他内容并不是那么笨重...除非你想要javascript是必需的,否则它更有必要(那么你可以从兄弟li获取文件名或者但是,有一些问题:

HTML

您在每个列表的末尾都有一个随机tr标记(应该是br)。您的li不在ulol块之内,而form必须在li之内(您不能拥有<ul><li /><form /></ul> $dir }作为有效标记)。没什么大不了的,但这可能会给你带来一些显示问题。

UI

在长文件列表中点击单个“删除”会非常烦人,看起来没有办法从中恢复。更好的方法是让它们成为复选框,这样你就可以一次删除多个文件,并在最终决定之前改变主意。然后,您只需要一个表单,为每个文件提供单独的输入更有意义。

安全

我不确定你是怎么得到的../(我真的希望注册全局变量没有开启),但是你应该绝对确定所请求的文件删除包含一个有效的删除路径,最好不要包含/或领先的{{1}}或其他内容。您应验证此输入。

答案 1 :(得分:0)

带有文件名的隐藏字段就足够了,您可以使用php的$ _POST来获取其他脚本中的文件名。另一种选择是使用带有文件名的get参数将其发布到脚本中,因此您只需更改get参数部分。

真正的问题是你应该清理第二个脚本收到的输入。人们只能删除允许删除的文件,这一点非常重要。 至少应检查文件是否在特定文件夹中。其他选项只删除一个文件夹中的文件(因此不接受路径)或将文件名抽象出id的背后