[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление файлов из папки
m4a1fox
Добрый день кважаемые эксперты. Интересует такой вопрос... В БД заносятся пути к картинкам title alt. Заносятся они в админке. В админке так же есть возможнось удалять строки из БД. Но как реализовать, что бы при удалении строк, сразу же удалялась и картинка из БД...?



Спустя 5 минут, 42 секунды (13.04.2011 - 13:54) Krevedko написал(а):
наверное не из бд, а из папки ты хочешь.
попробуй unlink

Спустя 2 минуты, 24 секунды (13.04.2011 - 13:57) m4a1fox написал(а):
Krevedko
Да.... точно. Удалять картинки из папки, потому что из БД оно удаляется.

Спустя 5 минут, 26 секунд (13.04.2011 - 14:02) Krevedko написал(а):
у меня оно удалялось, но как-то через раз. может кто скажет, из-за чего так бывает ?
сделал дополнительно скриптик чистки, который смотрит, есть ли "левые" файлы в папке, которых нет в базе и тогда вычищает нормально. вот даже готовый скриптик могу дать

$sql = "SELECT * FROM `pics`";
$res = mysqlQuery($sql, CONNECT);

if(mysql_num_rows($res) > 0)
{
while($row = htmlChars(mysql_fetch_assoc($res)))
$arr[] = $row['name'];
}

//Собираем массив файлов в директории
$dir = "../pics/";

if (is_dir($dir))
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if(($file !=".") && ($file !=".."))
$files[] = $file;
}
closedir($dh);
}
}


//Определяем файлы, которые есть в директории, но нет в базе и удаляем их как лишние
$delete_values = array_diff ($files, $arr);

$text = '';
if(!empty($delete_values))
{
$text .= '<strong>Лишние файлы:</strong> <br /><br />';
foreach($delete_values as $value)
{
$filename = '../pics/' . $value;
unlink($filename);
$text .= $value . '<br />';
}
}

else
$text .= '<strong>Лишних файлов нет</strong>';

Спустя 24 секунды (13.04.2011 - 14:02) UnWind написал(а):

if(is_file($file)) {
unlink($file);
}
else {
echo 'Удаляемый файл ненайден';
}

Спустя 5 минут, 57 секунд (13.04.2011 - 14:08) UnWind написал(а):
Krevedko
Через раз это как ? Объясни по подробней, что бы я знал, что в первую очередь смотреть.

Спустя 32 секунды (13.04.2011 - 14:09) Krevedko написал(а):
ну из базы удаляет, а из папки нет.
причину я так и не понял.

Спустя 9 минут, 18 секунд (13.04.2011 - 14:18) m4a1fox написал(а):
Собственно получилось реализовать удаление только одного файла, а если выбрать насколько то появляется ошибка... Если кто знает в чем подскажите...
Собственно код

if(sizeof($_POST['photo']) > 0)
{
foreach ($_POST['photo'] as $photo)
{
unlink($photo);
}


Но выше есть еще вот такой код

if(sizeof($_POST['id']) > 0) { // если выбраны чекбоксы
foreach($_POST['id'] as $data) { // проходим циклом, все чекбоксы
mysql_query("DELETE FROM `photo_day` WHERE `id` = {$data} "); // удаляем, что надо
}
}


То есть выбираем chekсbox'ы и по отмеченным удаляем строки из БД.

Вот так попытался реализовать

if(sizeof($_POST['id']) > 0) { // если выбраны чекбоксы
foreach($_POST['id'] as $data) { // проходим циклом, все чекбоксы
mysql_query("DELETE FROM `photo_day` WHERE `id` = {$data} "); // удаляем, что надо
}
foreach ($_POST['photo'] as $photo)
{
unlink($photo);
}
}


но скрипт отказался работать...

Спустя 10 минут, 6 секунд (13.04.2011 - 14:28) UnWind написал(а):
Krevedko
В общем я вечером гляну, отпишусь в личку и тут с листингом.

Спустя 6 минут, 2 секунды (13.04.2011 - 14:34) Krevedko написал(а):
Цитата (UnWind @ 13.04.2011 - 11:28)
Krevedko
В общем я вечером гляну, отпишусь в личку и тут с листингом.

скрипт, что я дал выше, удаляет все как надо
а тот, который барахлит, вот:

//Если нажата кнопка удаления, удаляем файлы и записи из БД
if(isset($_POST['delete']))
{
unset($_POST['delete']);
if(!empty($_POST))
{
foreach($_POST as $key => $value)
{
$filename = '../pics/' . $key;
unlink($filename);

}
$data = implode(",", $_POST);

$sql = "DELETE FROM `pics` WHERE `id` IN (" . $data . ")";
$res = mysqlQuery($sql, CONNECT);

//Кешируем все записи в файл, т.к. произошло их изменение
$path = '../cache/all.txt';
cache_id('pics', $path);

header('location: /admin/?action=delete');
die();
}
}


Спустя 52 минуты, 11 секунд (13.04.2011 - 15:26) UnWind написал(а):
Krevedko
Я уже это заметил biggrin.gif
Хорошо, по ковыряюсь в этом, интересно стало. smile.gif

Переменная $key у тебя содержит на сколько я понял имя файла взятое из базы ?

Спустя 13 минут, 8 секунд (13.04.2011 - 15:40) Krevedko написал(а):
да. поэтому я и очищаю $_POST['delete'], чтобы в массиве не было этого ключа. ну смысл ты понял...
это админка, где чекбоксами отмечаются картинки, которые надо удалить. удаляет криво, поэтому я подстраховался зачищающим скриптом )

Спустя 8 минут, 29 секунд (13.04.2011 - 15:48) m4a1fox написал(а):
И все же вот этот код

if($_POST['delete']) { // если нажата кнопка в форме
$url = 'http://' . $_SERVER['HTTP_HOST'] . '/admin/photo_day.php';
if(sizeof($_POST['id']) > 0) { // если выбраны чекбоксы
foreach($_POST['id'] as $data) { // проходим циклом, все чекбоксы
mysql_query("DELETE FROM `photo_day` WHERE `id` = {$data} "); // удаляем, что надо
unlink($_POST['photo']);
}
}


удаляет одну фотку и строку выбранную в checkbox. Но если строк несколько.... как вот это

unlink($_POST['photo']);

в массив засунуть?

Спустя 5 минут, 37 секунд (13.04.2011 - 15:54) Krevedko написал(а):
unlink($data);
если у тебя фотки названы как id )

Спустя 10 минут, 10 секунд (13.04.2011 - 16:04) m4a1fox написал(а):
Krevedko
Да вот не как id (к сожелению...).

Спустя 17 минут, 58 секунд (13.04.2011 - 16:22) m4a1fox написал(а):
Вроде разобрался... всем спасибо за участие...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.