[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с удаление нескольких файлов
demius
Здравствуйте. Не могу что то сообразить как можно сделать так что при вызове unlink, удалялось сразу несколько файлов, с базы удаляет нормально, ровно столько сколько было отмечен checkbox`ами, проблему конечно немного трудновато объяснить, ну пока объяснил как смог, походу дела уже расскажу больше.

mysql_connect ('localhost', 'root', '333');
mysql_query ('SET NAMES cp1251');
mysql_select_db ('perfect_wave') or die ('Нема бази данних');

$PhotoAlbumID = $_GET['PhotoAlbumID'];
$PhotoAlbumName = $_POST['PhotoAlbumName'];
$Delete = $_POST['delphoto'];

//здесь беруться название тех двух файлов которые будут удаляться. на выходе получаем e = 1.jpg и f = 1.1.jpg (например)
$PhotoNameList = "select * from photos where PhotoID in ('".implode("','",$Delete)."')";
$c = mysql_fetch_row(mysql_query ($PhotoNameList));
$e = basename ($c[1]);
$f = basename ($c[2]);

$PhotoAlbumNameList = "select * from PhotoAlbum where PhotoAlbumID = ".$PhotoAlbumID;
$a = mysql_fetch_row(mysql_query ($PhotoAlbumNameList));

$q = "update photoalbum set PhotoAlbumName = '".$PhotoAlbumName."', FolderName = '".$PhotoAlbumName."' where PhotoAlbumID = ".$PhotoAlbumID;
mysql_query ($q);

$b = "update photos set PhotoURL = '".$PhotoAlbumName."/".$e."' where PhotoAlbumID = ".$PhotoAlbumID;
mysql_query ($b);

rename ("photoalbum/".$a[2], "photoalbum/".$PhotoAlbumName);

//вот тут как раз с unlink и возникает проблема, надо чтоб нам удаляло сразу несколько файлов, если нам это пришло от чекбоксов, как вот удалить с базы несколько разобрался, а с файлами все никак...
if (isset ($Delete))
{
$d = "delete from photos where PhotoID in ('".implode("','",$Delete)."')";
mysql_query ($d);

$file_name = "photoalbum/$PhotoAlbumName/$e";
if (is_file($file_name))
{
unlink($file_name);
}
else
{
echo "The file $file_name does not exist";
}

$file_name2 = "photoalbum/$PhotoAlbumName/$f";
if (is_file($file_name2))
{
unlink($file_name2);
}
else
{
echo "The file $file_name2 does not exist";
}
}


mysql_close ();

header("Location: custom_photo_page.php");




Спустя 35 минут, 44 секунды (14.04.2011 - 11:23) demius написал(а):
в любом случае надо использоваться цикл, но что то не могу понять как его здесь реализовать...

Спустя 1 час, 2 минуты, 49 секунд (14.04.2011 - 12:26) Raito-kun написал(а):
если всё храниться в массиве $c, то
foreach($c as $key => $val) {
$file_name = "photoalbum/" . $PhotoAlbumName . "/" . basename($c[$key]);
if(file_exists($file_name)) {
unlink($file_name);
}
}

и не нужны ни $f, ни $e, ни куча if'ов
писал тут, так что возможно что-то не так. но идея такая.

Спустя 7 минут, 37 секунд (14.04.2011 - 12:33) Krevedko написал(а):
точно такая же тема обсуждалась вчера
http://phpforum.ru/index.php?showtopic=43574

Спустя 11 часов, 4 минуты, 29 секунд (14.04.2011 - 23:38) demius написал(а):
все равно не работает
<?php

mysql_connect ('localhost', 'root', '333');
mysql_query ('SET NAMES cp1251');
mysql_select_db ('perfect_wave') or die ('Нема бази данних');

$PhotoAlbumID = $_GET['PhotoAlbumID'];
$PhotoAlbumName = $_POST['PhotoAlbumName'];
$Delete = $_POST['delphoto'];

$PhotoNameList = "select * from photos where PhotoID in ('".implode("','",$Delete)."')";
$c = mysql_fetch_row(mysql_query ($PhotoNameList));
//$e = basename ($c[1]);
//$f = basename ($c[2]);


$PhotoAlbumNameList = "select * from PhotoAlbum where PhotoAlbumID = ".$PhotoAlbumID;
$a = mysql_fetch_row(mysql_query ($PhotoAlbumNameList));

$q = "update photoalbum set PhotoAlbumName = '".$PhotoAlbumName."', FolderName = '".$PhotoAlbumName."' where PhotoAlbumID = ".$PhotoAlbumID;
mysql_query ($q);

$b = "update photos set PhotoURL = '".$PhotoAlbumName."/".$e."' where PhotoAlbumID = ".$PhotoAlbumID;
mysql_query ($b);

rename ("photoalbum/".$a[2], "photoalbum/".$PhotoAlbumName);

if (isset ($Delete))
{
$d = "delete from photos where PhotoID in ('".implode("','",$Delete)."')";
mysql_query ($d);

foreach($c as $key => $val)
{
$file_name = "photoalbum/" . $PhotoAlbumName . "/" . basename($c[$key]);
if(file_exists($file_name))
{
unlink($file_name);
}
}
}


mysql_close ();

header("Location: custom_photo_page.php");
?>

Спустя 19 минут, 29 секунд (14.04.2011 - 23:57) Raito-kun написал(а):
ну ты бы рассказал где останавливается, протрекал бы значения массива, повыводил бы на каком этапе и что не так

Спустя 16 минут, 8 секунд (15.04.2011 - 00:13) demius написал(а):
переменная file_name почему то имеет такой вид "photoalbum/404/28", а должна быть "photoalbum/404/1.1.jpg" например, да и надо не забывать что она нужно удалить сразу два файла

Спустя 5 минут, 23 секунды (15.04.2011 - 00:19) Raito-kun написал(а):
сделай print_r($c)

Спустя 3 минуты, 52 секунды (15.04.2011 - 00:22) demius написал(а):
Array ( [0] => 93 [1] => 404/2.jpg [2] => 404/2.1.jpg [3] => 29 )

а я отмечал 2 и 3 (т.е. картинки 2.1.jpg, 2.jpg и 3.1.jpg, 3.jpg соответственно), как видим есть только 2

Спустя 51 минута, 4 секунды (15.04.2011 - 01:14) Raito-kun написал(а):
Цитата
$c = mysql_fetch_row(mysql_query ($PhotoNameList));

вот это переделай на
while($c = mysql_fetch_row(mysql_query ($PhotoNameList))) {
print_r($c);
}

и посмотри.

Спустя 12 минут, 17 секунд (15.04.2011 - 01:26) demius написал(а):

Спустя 1 час, 55 минут, 40 секунд (15.04.2011 - 03:22) Raito-kun написал(а):
$q = mysql_query($PhotoNameList);
while($c = mysql_fetch_row($q)) {
print_r($c);
}

уже мог бы и сам догадаться. если я правильно понял, ты таскаешь с результата запроса 1 рекорд, когда тебе нужны и остальные. если я прав - ты сейчас увидишь нужные тебе остальные файлы. потом выставишь чтобы удалялись только твои нужные индексы 1 и 2 в цикле. думаю всё понятно объяснил.

Спустя 20 часов, 10 минут, 10 секунд (15.04.2011 - 23:32) demius написал(а):
после вызова
$q = mysql_query($PhotoNameList);
while($c = mysql_fetch_row($q)) {
print_r($c);
}


получаем вот Array ( [0] => 108 [1] => 404/2.jpg [2] => 404/2.1.jpg [3] => 34 ) Array ( [0] => 109 [1] => 404/3.jpg [2] => 404/3.1.jpg [3] => 34 ) я как раз картинку 2 и 3 отмечал, так что передает как видим нормально
.
я вот только не могу понять как сделать так чтоб с двух массивов (которые у нас в переменной С) можно было по индексу 1 и 2 вытянуть с перового 2.jpg и 2.1.jpg, а с другого 3.jpg и 3.1.jpg соответственно, разгадка где то рядом но что то ничего в голову не приходит...

Спустя 33 минуты (16.04.2011 - 00:05) Raito-kun написал(а):
хорошо, давай еще чуть допишу)

$indexes_to_delete = array(1, 2);
$q = mysql_query($PhotoNameList);
while($c = mysql_fetch_row($q)) {
foreach($indexes_to_delete as $index_to_delete) {
$file_name = "photoalbum/" . $PhotoAlbumName . "/" . basename($c[$index_to_delete]);
if(file_exists($file_name)) {
unlink($file_name);
}
}
}


Спустя 2 дня, 20 часов, 24 минуты, 53 секунды (18.04.2011 - 20:30) demius написал(а):
Цитата (Raito-kun @ 15.04.2011 - 21:05)
$indexes_to_delete = array(1, 2);

у нас может быть и 10 картинок, так что строго задавать количество массивов не катит
Быстрый ответ:

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