За последние 24 часа нас посетили 61059 программистов и 1744 робота. Сейчас ищут 1058 программистов ...

Неправильно работает функция unlink

Тема в разделе "PHP для новичков", создана пользователем White Wolf, 23 сен 2009.

  1. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    есть код который показывает какие файлы лежат в папке. Затем нужно по выбранным чекбоксам удалить файлы. Делаю так:
    Код (Text):
    1.  
    2. $pth_src=$_SERVER['DOCUMENT_ROOT'].'/test/';//путь к папке
    3. $handle=opendir($pth_src);
    4. while($file=readdir($handle)) {
    5.   if($file != "." && $file != "..") {//исключаем переход на верхний уровень
    6.   $parts=explode(".",$file);
    7.   $nuno=$parts[count($parts)-1];
    8.   $nuno2=strtolower($nuno);
    9. if ($nuno2=='jpg' || $nuno2=='jpeg' || $nuno2=='gif' || $nuno2=='png') {
    10. $i++;
    11. $pictures[$i]=$file;
    12. echo "<TR align='center' valign='center'>";
    13.  
    14. echo "<TD align='right'>";
    15.  
    16. echo "<INPUT type='checkbox' name='pic".$i."' value='".$i."'>";
    17.  
    18. echo "</TD>";
    19.  
    20. echo "<TD align='left'>";
    21.  
    22. echo "<span align='center'><a href='javascript:openWinImg();'>".$pictures[$i]."</a></span><br />";
    23.  
    24. echo "</TD>";
    25.  
    26. echo "</TR>";
    27.  
    28. }}}
    29. echo "<TR align='center'>";
    30.  
    31. echo "<TD colspan='2'>";
    32.  
    33. echo "Меню";
    34.  
    35. echo "</TD>";
    36.  
    37. echo "</TR>";
    38.  
    39. echo "<TR align='center'>";
    40.  
    41. echo "<TD align='right'>";
    42.  
    43. echo "<INPUT type='submit' name='add_pic' value='Добавить' onClick='load_img();'>";
    44.  
    45. echo "</TD>";
    46.  
    47. echo "<TD align='center'>";
    48.  
    49. echo "<INPUT type='submit' name='del_pic' value='Удалить'>";
    50.  
    51. echo "</TD>";
    52.  
    53. echo "</TR>";
    54.  
    55. echo "</TABLE>";
    56.  
    57. echo "</form>";
    58.  
    59. if ($_POST['del_pic'])
    60.  
    61. {
    62.  
    63.     for ($k = 1; $k <= count($pictures); $k++)
    64.  
    65.     {
    66.  
    67.     if ($_POST['pic'.$k] == $k)
    68.  
    69.     {
    70.  
    71.         unlink("test/".$pictures[$k]);
    72.  
    73.         unset($_POST['pic'.$k]);
    74.  
    75.         echo "pic".$k."=".$_POST['pic'.$k];
    76.  
    77.     }
    78.  
    79.     }
    80.  
    81. }
    Проблема в том что функция unlink удаляет не те файлы какие нужно, а почему не понятно. Помогите что знает в чем дело[/code]
     
  2. Silicium

    Silicium Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    А слабо проверить, то что получаешь в POST?
    Когда чекбокс не выбран, то он и не передается.
    Тоесть в твоем случае будут удаляться такое количество файлов - сколько чекбоксов ты отметил. И заметь удаляться первые файлы в списке ;)
     
  3. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    добавил эхо перед unlink и посмотрел что передает пост. Пост передает правимльные значения. Если выбран 3-ий чекбокс то пишет pic3=3 и т. д. Проблема в том что после нажатия кнопки удаления файлов сам файл остается на странице отображаться. А если нажимаешь обновить, по всплывает сообщение о повторной отправке данных и выбранные мной чекбоксы а вернее их значения опять наверное отправляются в пост. И удаляются файлы. Как этого избежать чтоб при обновлении страницы такого не было?
     
  4. HDD

    HDD Активный пользователь

    С нами с:
    21 сен 2009
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    РФ, Оренбург
    то что файл остаётся на странице, если он конечно физически удаляется, это от того что удаление в коде у тебя идёт уже после вывода а не вначале, тобишь он сначала выводит всё а потом уже удаляет