PHP文件删除问题?

时间:2011-06-11 04:01:28

标签: php html delete-file

我有以下HTML表单:

<form action='delete.php' method='POST'>
    <table>
        <div class = '.table'>
            <?php
            $dir = '../uploads/store/';
            $newdir = ereg_replace('\.','',$dir);

            if (is_dir($dir)) {
               if ($dh = opendir($dir)) {
                  while (($file = readdir($dh)) !== false) {
                     if (!preg_match('/^(\.(htaccess|\.)?|index\.html)/',$file)) {
                        echo "<tr><td><font color = 'white'><a href='$newdir$file'>$file</a></font></td>";
                        echo "<td><input type='submit' value ='Delete'></td></tr>";
                        echo "<input align='right' type='hidden' value='$file' name='file'>";
                     }
                  }
                  closedir($dh);
               }
            }
            ?>
        </div>
    </table>
</form>

指向以下PHP脚本的链接:

<?php
    session_start();

    $file = $_POST['file'];
    $dir = '../uploads/store/';
    $file = $dir . $file;

    opendir($dir);

    if(unlink($file)) {
        echo "File sucessfully deleted";
        $_SESSION['username'] = 'guitarman0831';
        header('Refresh: 2;url=http://www.ohjustthatguy.com/uploads/uploads.html');
    } else {
        echo "Error: File could not be deleted";
        $_SESSION['username'] = 'guitarman0831';
        header('Refresh: 2;url=http://www.ohjustthatguy.com/uploads/uploads.html');
    }

?>

但是,当在HTML表单中按下删除按钮时,将删除要删除的项目上方的项目。

希望这是有道理的。

注意:我不打算使用这些脚本来保证安全性,我稍后会继续处理。现在只有我使用这项服务。

1 个答案:

答案 0 :(得分:2)

您的HTML表单需要使用各种提交按钮传递$file的值,而不是使用隐藏字段。

问题是,当您提交表单时,所有隐藏字段都会POST到delete.php。然后,由于您尚未使用PHP友好的HTML数组变量语法,因此PHP仅使用最后一个来设置$_POST['file']的值。如果您在var_dump中执行$_POST delete.php,则会看到POSTed输入是什么。

使用当前标记最简单的方法就是将每个提交按钮命名为file并将$ file作为其value传递。即你可以这样做:

<button name="file" value="example.txt" type="submit">Delete</button>

或者,您可以使用单选按钮或其他标记。