Ошибка удаления файла PHP? - PullRequest
0 голосов
/ 11 июня 2011

У меня есть следующая 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 Ответ

2 голосов
/ 11 июня 2011

В вашей HTML-форме необходимо, чтобы различные кнопки отправки передавали значение для $file вместо использования скрытых полей.

Проблема в том, что все скрытых полей размещаются в файле delete.php при отправке формы. Кроме того, поскольку вы не использовали синтаксис переменной массива HTML, дружественный к PHP, PHP использует только последний из них, чтобы установить значение $_POST['file']. Если вы наберете var_dump из $_POST в delete.php, вы увидите, что представляет собой ввод POST.

Проще всего сделать с текущей разметкой, просто присвоить каждой кнопке отправки имя file и передать $ file в качестве value. то есть вы могли бы сделать:

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

Кроме того, вы можете использовать переключатели или другую разметку.

...