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, то
и не нужны ни $f, ни $e, ни куча if'ов
писал тут, так что возможно что-то не так. но идея такая.
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
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
а я отмечал 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 написал(а):
после вызова
получаем вот 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 соответственно, разгадка где то рядом но что то ничего в голову не приходит...
$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 картинок, так что строго задавать количество массивов не катит